Вступить в клуб →
сложнаявопросSQL и оптимизация запросов

Индекс добавили, а план по-прежнему показывает полное сканирование

В таблице orders 5 млн строк, колонка is_deleted заполнена так: примерно 99% строк со значением false, около 1% — true.

Чтобы ускорить основной запрос списка заказов, создали индекс по is_deleted. Ускорения нет, план запроса WHERE is_deleted = false по-прежнему показывает полное сканирование таблицы.

Почему так происходит?

  • Условию удовлетворяет почти вся таблица: обход индекса с обращением к каждой строке дороже последовательного чтения
  • Булевы колонки индексировать нельзя технически, индекс создан, но не используется никогда
  • Не хватает статистики: после её пересчёта планировщик в любом случае переключится на индексный доступ по этой колонке
  • Индекс нужно было создать как UNIQUE — только уникальные индексы участвуют в планах выборки

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела