Вступить в клуб →
лёгкаявопросPostgreSQL, ORM и кэш Redis

Seq Scan на пяти миллионах строк в EXPLAIN

Ручка логина стала отвечать за 700 мс. EXPLAIN ANALYZE на запросе показывает:

EXPLAIN ANALYZE SELECT id, password_hash FROM users WHERE email = 'ivan@example.com';
-- Seq Scan on users  (cost=0.00..98431.00 rows=1 width=48) (actual time=612.4..612.4 rows=1 loops=1)
--   Filter: (email = 'ivan@example.com'::text)
--   Rows Removed by Filter: 4999999

Что это значит и какое первое действие уместно?

  • База перебирает всю таблицу построчно: по колонке `email` нет индекса, его нужно добавить
  • Не хватает оперативной памяти под кэш страниц, нужно увеличить ресурсы контейнера с базой
  • Запрос возвращает слишком много колонок; нужно выбрать только `id` и делать второй запрос за хэшем
  • Проблема в типе колонки: сравнение строк в PostgreSQL всегда идёт последовательным перебором

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

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

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

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