В выводе EXPLAIN вы видите узел Seq Scan on orders. Что это обычно означает в плане выполнения запроса?
AБаза использует индекс по фильтруемой колонке и читает только подходящие строки, не обращаясь к остальным страницам таблицы
ordersBБаза возвращает результат целиком из кэша запросов и не обращается к таблице
orders на диске на этом шаге плана выполненияCБаза блокирует таблицу
orders до конца запроса и не позволяет другим транзакциям читать или изменять данные в ней до коммитаDБаза читает таблицу
orders целиком и затем применяет фильтр (Filter) с условием WHERE к каждой прочитанной строке таблицыПравильный ответ.
Seq Scan — последовательное чтение всей таблицы с применением фильтра к каждой строке, без использования индекса.Разбор
При Seq Scan планировщик считает, что проще пройтись по всем строкам, чем прыгать по индексу. Это нормально для маленьких таблиц или когда условие WHERE отбирает большую долю данных. Узкое место возникает, когда таблица большая, а фильтр должен был сильно сузить выборку — тогда стоит проверить наличие подходящего индекса. Кэш запросов и блокировки — это про другие механизмы, не про последовательное чтение.
Проверь себя · 1/3разбор после ответа
Есть индекс по
orders.created_at, но EXPLAIN для фильтра WHERE date(created_at) = current_date показывает Seq Scan. Почему это часто происходит?Ещё вопросы по теме «EXPLAIN и оптимизация»
- Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица `events` очень большая. Что даёт запуск `EXPLAIN` для этого запроса?
- В плане `EXPLAIN` для запроса по пользователю вы видите проход по индексу `orders_user_id_idx` для таблицы заказов. Какой вывод наиболее корректен?
- На большой таблице `events` запрос `SELECT * FROM events ORDER BY created_at DESC LIMIT 100` неожиданно работает быстро. Какое объяснение наиболее вероятно при наличии индекса по `created_at`?
- Есть индекс по `orders.created_at`, но `EXPLAIN` для фильтра `WHERE date(created_at) = current_date` показывает `Seq Scan`. Почему это часто происходит?
- В выводе `EXPLAIN` вы видите оценку `cost=0.00..431.00`. Какой вывод аналитик может сделать безопасно?
- Все вопросы по «EXPLAIN и оптимизация» →