PostgreSql: разница между EXPLAIN и EXPLAIN ANALYZE

Основное различие между EXPLAIN и EXPLAIN ANALYZE в PostgreSQL заключается в том, выполняется ли запрос на самом деле.

EXPLAIN только показывает, как планировщик собирается выполнять запрос, но не запускает его. EXPLAIN ANALYZE действительно выполняет запрос и показывает, что произошло на самом деле.

📊 Сравнение

ХарактеристикаEXPLAINEXPLAIN ANALYZE
Выполнение запросаНет. Только планирование.Да. Запрос выполняется полностью.
Показываемые данныеТолько оценки планировщика (стоимость, предполагаемое число строк).Оценки + фактические данные (реальное время, фактическое число строк).
Побочные эффектыОтсутствуют.Есть. Если это INSERT/UPDATE/DELETE, данные изменятся.
Накладные расходыМинимальные.Могут быть значительными из-за профилирования.

⚠️ Важное предупреждение

Поскольку EXPLAIN ANALYZE реально выполняет запрос, будьте осторожны с командами, изменяющими данные (INSERT, UPDATE, DELETE). Чтобы избежать нежелательных изменений, оберните выполнение в транзакцию и откатите её:

BEGIN;
EXPLAIN ANALYZE UPDATE ...;
ROLLBACK;

💡 Что выбирать

  • EXPLAIN: Когда нужно быстро посмотреть план без риска и затрат.
  • EXPLAIN ANALYZE: Когда нужно понять, почему запрос медленный, и сравнить оценку с реальностью (например, планировщик ожидал 10 строк, а по факту их 10 000).
Запись опубликована в рубрике Базы данных. Добавьте в закладки постоянную ссылку.

Добавить комментарий