На главную

Таблицы и SQL

Разбор плана EXPLAIN

Превращает вывод EXPLAIN (ANALYZE) в дерево с долями времени и подсказками: где не хватает индекса, где планировщик промахнулся, где сортировка ушла на диск.

Как получить план

PostgreSQL: EXPLAIN (ANALYZE, BUFFERS) ваш_запрос; — вставьте вывод как есть, рамку psql можно не убирать. Годится и FORMAT JSON. MySQL: EXPLAIN FORMAT=JSON ваш_запрос;

4

узлов

PG текст

формат

0.201 мс

планирование

143.086 мс

выполнение

Что стоит посмотреть

Hash Join

Планировщик ошибся в оценке строк в 1040 раз (ждал 3, получил 3 120) — помогает ANALYZE и увеличение статистики по колонке.

Seq Scan на orders

Последовательное чтение 30 000 строк — вероятно, не хватает индекса под условие фильтра.

Seq Scan на orders

Фильтр отбросил 470 000 строк уже после чтения — условие стоит перенести в индекс.

Seq Scan на orders

Самый дорогой шаг: 69% всего времени (98.01 мс собственного времени).

Дерево плана

Hash Join
cost 4260.2строк по плану 3фактически 3 12030% времени

Hash Cond: (o.user_id = u.id)

Seq Scan on orders o
cost 3800строк по плану 30 000фактически 30 00069% времени

Filter: (total > 100)

Rows Removed by Filter: 470000

Hash
cost 1.04строк по плану 400фактически 4000% времени

Buckets: 1024 Batches: 1 Memory Usage: 40kB

Seq Scan on users u
cost 1.04строк по плану 400фактически 4000% времени