Вопрос с собеседования · Базы данных

В каких случаях созданный индекс, скорее всего, не будет использован?

MiddleИндексы и планы запросовSQLPostgreSQL
Ещё спрашивают так:
  • Почему база не использует мой индекс?
Коротко

Индекс не используется, когда: функция или приведение типа над колонкой, LIKE '%…' с ведущим шаблоном, низкая селективность (выбирается большая доля строк), запрос не по левому префиксу составного индекса, устаревшая статистика.

  • WHERE lower(email) = ? — функциональный индекс ON (lower(email))
  • LIKE '%abc%' — триграммный индекс (pg_trgm) или полнотекстовый поиск
  • Несовпадение типов параметра и колонки ломает индекс

А ещё Иногда полный просмотр действительно быстрее — оптимизатор прав

Подробно

B-tree упорядочен по значению колонки, поэтому любое преобразование этого значения разрушает порядок — лечится функциональным индексом по тому же выражению. Ведущий '%' не даёт зафиксировать префикс, и для такого поиска нужен триграммный или полнотекстовый индекс. Низкая селективность — случай, когда планировщик сознательно предпочитает последовательное чтение: сходить в индекс, а затем за каждой строкой в таблицу дороже, чем прочитать её подряд. Сюда же относится неявное приведение типов, когда колонка и параметр разного типа.

Что хотят услышать

  • Перечень причин с примерами.
  • Как исправить каждую.
  • Что Seq Scan не всегда ошибка.

Частые ошибки

  • Считать неиспользование индекса ошибкой планировщика — часто это верное решение.
  • Забывать про неявное приведение типов как причину.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Точное равенство по индексированной колонке с высокой селективностью условия
  • ✓Колонка обёрнута функцией: lower(email) = ? при обычном индексе по email
  • ✓LIKE с ведущим шаблоном: name LIKE '%иванов'
  • ✓Условие отбирает большую часть таблицы

Что спросят дальше

  • Что такое функциональный индекс?
  • Почему covering index избавляет от обращения к таблице?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования