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