Перейти к содержимому
4 / 15

Индекс есть, а запрос медленный: почему планировщик его не берёт?

Планировщик выбирает план по оценке стоимости, и отказ от индекса означает одно из трёх. Первое — оценка говорит, что строк много: при выборке заметной доли таблицы последовательное чтение дешевле случайных обращений по индексу; это правильное решение. Второе — оценка неверна: устарела статистика после массовой загрузки, или условия скоррелированы (city = 'Москва' AND country = 'Россия'), и планировщик перемножает селективности как независимые — лечится ANALYZE и расширенной статистикой CREATE STATISTICS. Третье — индекс неприменим: функция над колонкой (lower(email)), несовпадение типов (bigint против text), сортировка в другом порядке, LIKE '%x%' без триграмм, NULL-семантика. Отдельная категория — параметры: random_page_cost по умолчанию 4.0 рассчитан на вращающиеся диски, и на SSD значение 1.1–1.5 честнее, иначе индексные планы систематически выглядят дороже, чем они есть.

Индекс есть, а запрос медленный: почему планировщик его не берёт? | JScriptiser