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