Основное различие между EXPLAIN и EXPLAIN ANALYZE в PostgreSQL заключается в том, выполняется ли запрос на самом деле.
EXPLAIN только показывает, как планировщик собирается выполнять запрос, но не запускает его. EXPLAIN ANALYZE действительно выполняет запрос и показывает, что произошло на самом деле.
📊 Сравнение
| Характеристика | EXPLAIN | EXPLAIN ANALYZE |
|---|---|---|
| Выполнение запроса | Нет. Только планирование. | Да. Запрос выполняется полностью. |
| Показываемые данные | Только оценки планировщика (стоимость, предполагаемое число строк). | Оценки + фактические данные (реальное время, фактическое число строк). |
| Побочные эффекты | Отсутствуют. | Есть. Если это INSERT/UPDATE/DELETE, данные изменятся. |
| Накладные расходы | Минимальные. | Могут быть значительными из-за профилирования. |
⚠️ Важное предупреждение
Поскольку EXPLAIN ANALYZE реально выполняет запрос, будьте осторожны с командами, изменяющими данные (INSERT, UPDATE, DELETE). Чтобы избежать нежелательных изменений, оберните выполнение в транзакцию и откатите её:
BEGIN;
EXPLAIN ANALYZE UPDATE ...;
ROLLBACK;
💡 Что выбирать
EXPLAIN: Когда нужно быстро посмотреть план без риска и затрат.EXPLAIN ANALYZE: Когда нужно понять, почему запрос медленный, и сравнить оценку с реальностью (например, планировщик ожидал 10 строк, а по факту их 10 000).