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

Как работают индексы в базе и почему планировщик иногда их игнорирует?

Индекс — отдельная структура, которая позволяет найти строки, не читая всю таблицу. По умолчанию это B-tree: отсортированное дерево, дающее поиск по равенству, по диапазону и готовый порядок для ORDER BY. У составного индекса работает правило левого префикса: индекс по (a, b) помогает запросу по a и по a + b, но почти бесполезен, когда в условии только b. Планировщик берёт индекс не всегда: если условие подходит под большую долю таблицы, последовательное чтение дешевле случайных обращений; функция или приведение типа над колонкой делают индекс неприменимым; устаревшая статистика ломает оценку селективности. Индексы не бесплатны — каждый замедляет запись и занимает место, поэтому набор подбирают под профиль нагрузки, а спор решает EXPLAIN (ANALYZE, BUFFERS).

Как работают индексы в базе и почему планировщик иногда их игнорирует? | JScriptiser