В выводе EXPLAIN вы видите узел Seq Scan on orders. Что это обычно означает?
AБаза использует индекс и читает только подходящие строки.
BБаза возвращает результат из кэша и не читает таблицу.
CБаза читает таблицу
orders целиком и затем применяет Filter (условия WHERE).DБаза блокирует таблицу
orders до конца запроса.Правильный ответ.
Seq Scan — последовательное чтение таблицы целиком.Разбор
При Seq Scan планировщик ожидает, что проще пройтись по всем строкам, чем прыгать по индексу. Это может быть нормальным для маленьких таблиц или когда условие WHERE отбирает большую долю данных. Узкое место возникает, когда таблица большая, а фильтр должен был сильно сузить выборку.
Проверь себя · 1/3разбор после ответа
Есть индекс по
orders.created_at, но EXPLAIN для фильтра WHERE date(created_at) = current_date показывает Seq Scan. Почему это часто происходит?Ещё вопросы по теме «EXPLAIN и оптимизация»
- Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица `events` очень большая. Что дает запуск `EXPLAIN` для этого запроса?
- В плане `EXPLAIN` для запроса по пользователю вы видите `Index Scan using orders_user_id_idx on orders`. Какой вывод наиболее корректен?
- На большой таблице `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 и оптимизация» →