Вступить в клуб →
сложнаявопросSQL и проверка данных

Индекс по email создан, но план показывает последовательное чтение таблицы

На стенде с четырьмя миллионами пользователей запрос выполняется несколько секунд. Индекс есть:

CREATE INDEX idx_users_email ON users (email);

EXPLAIN ANALYZE
SELECT id FROM users WHERE lower(email) = 'ivan@example.com';

В плане — последовательное чтение всей таблицы (Seq Scan).

Почему индекс не используется?

  • Индекс ещё не достроен и не виден планировщику: нужно обновить статистику по таблице и повторить запрос
  • Обычный индекс не подходит для проверки на равенство строк, для этого нужен индекс другого типа
  • Функция над колонкой делает индекс по самой колонке неприменимым: нужен индекс по выражению lower(email) или сравнение без функции
  • EXPLAIN ANALYZE выполняет запрос с отключёнными индексами, фактический план нужно смотреть другой командой

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

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

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

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