В выводе EXPLAIN вы видите узел Seq Scan on orders. Что это обычно означает в плане выполнения запроса?

AБаза использует индекс по фильтруемой колонке и читает только подходящие строки, не обращаясь к остальным страницам таблицы orders
BБаза возвращает результат целиком из кэша запросов и не обращается к таблице 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. Почему это часто происходит?
Тренировать SQL в Telegram

Ещё вопросы по теме «EXPLAIN и оптимизация»