Sobes.tech
Back to questions
Junior — Middle
90

Что может привести к тому, что PostgreSQL не будет использовать индекс при выполнении поиска по определённому полю?

Answer from AI

sobes.tech AI

PostgreSQL может не использовать индекс при поиске по определённому полю по нескольким причинам:

  • Низкая селективность запроса: если условие поиска возвращает большой процент строк, планировщик может выбрать последовательное сканирование, так как оно эффективнее.
  • Типы данных или операции, несовместимые с индексом: например, использование функций или операций, которые не поддерживают индекс (например, LIKE '%pattern'), или несоответствие типов данных.
  • Отсутствие статистики или устаревшая статистика: если статистика таблицы не обновлена (ANALYZE), планировщик может принять неверное решение.
  • Использование выражений, не покрываемых индексом: например, поиск по вычисляемому полю без соответствующего функционального индекса.
  • Параметры конфигурации: например, слишком высокое значение random_page_cost может повлиять на выбор плана.

Пример: если у вас есть индекс по полю name, но запрос использует WHERE LOWER(name) = 'abc', а индекс не функциональный на LOWER(name), индекс не будет использован.