Почему индексы могут быть незадействованы в PostgreSQL

Python Middle Aston
Почему индексы могут быть незадействованы в PostgreSQL
Ответы
В PostgreSQL индексы могут не использоваться по нескольким причинам: - **Низкая селективность** - если индекс охватывает слишком много строк (например, булево поле с 50% распределением), оптимизатор может выбрать полное сканирование таблицы. - **Несоответствие типов** - если в запросе используется неявное приведение типов (например, сравнение строки с числом), индекс не будет задействован. - **Отсутствие статистики** - устаревшая или недостаточная статистика может привести к неправильному выбору плана выполнения. - **Маленькие таблицы** - для таблиц с небольшим количеством строк сканирование часто бывает быстрее, чем использование индекса. Пример: ``` -- Индекс не будет использован, если поле приводится к другому типу CREATE INDEX idx_users_phone ON users(phone); SELECT * FROM users WHERE phone = 12345; -- phone - text, а сравнивается с числом ``` - **Использование функций** - если поле обернуто в функцию, индекс не используется: ``` SELECT * FROM users WHERE lower(name) = 'john'; ``` - **Неоптимальные условия** - составные индексы требуют правильного порядка условий в запросе.