Индекс добавили, а план по-прежнему показывает полное сканирование
В таблице orders 5 млн строк, колонка is_deleted заполнена так: примерно 99% строк со значением false, около 1% — true.
Чтобы ускорить основной запрос списка заказов, создали индекс по is_deleted. Ускорения нет, план запроса WHERE is_deleted = false по-прежнему показывает полное сканирование таблицы.
Почему так происходит?
- Условию удовлетворяет почти вся таблица: обход индекса с обращением к каждой строке дороже последовательного чтения
- Булевы колонки индексировать нельзя технически, индекс создан, но не используется никогда
- Не хватает статистики: после её пересчёта планировщик в любом случае переключится на индексный доступ по этой колонке
- Индекс нужно было создать как UNIQUE — только уникальные индексы участвуют в планах выборки
