Как удобнее интерпретировать дерево EXPLAIN, чтобы понять, откуда берутся строки и где тратятся ресурсы?
AСверху вниз: сначала выполняется верхний узел, затем нижние.
BСнизу вверх: сначала выполняются узлы сканирования/фильтрации, а затем их результаты поднимаются к верхним узлам.
CСлева направо: порядок зависит от ширины вывода.
DВ любом направлении, потому что
EXPLAIN показывает шаги в случайном порядке.Правильный ответ. Чаще всего план читают снизу вверх: сканы → обработка → результат.
Разбор
В плане нижние узлы производят данные (например, Seq Scan или Index Scan). Дальше эти потоки обрабатываются: применяются условия, агрегации (Aggregate), сортировки (Sort) и в конце обрезка (Limit). Такой подход помогает связать узкие места с источником большого объёма строк.
Проверь себя · 1/3разбор после ответа
Вы хотите добавить новый запрос в дашборд и боитесь, что он сильно нагрузит базу, потому что таблица
events очень большая. Что дает запуск EXPLAIN для этого запроса?Ещё вопросы по теме «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 и оптимизация» →