В чем ключевые различия между EXPLAIN и EXPLAIN ANALYZE в PostgreSQL?

Ответ

Обе команды используются для анализа планов выполнения SQL-запросов, но служат разным целям.

EXPLAIN

  • Что делает: Показывает предполагаемый план выполнения, который построит оптимизатор PostgreSQL. Запрос при этом не выполняется.
  • Когда использовать: Для быстрой проверки того, как база данных собирается выполнить запрос, какие индексы планирует использовать и какие соединения таблиц выберет. Это безопасно для выполнения на production-системах, так как не создает нагрузки.
  • Вывод: Содержит только оценки (estimated cost, estimated rows).

EXPLAIN ANALYZE

  • Что делает: Сначала строит план, а затем реально выполняет запрос и собирает фактическую статистику.
  • Когда использовать: Для глубокого анализа производительности, когда нужно сравнить оценки планировщика с реальностью. Это основной инструмент для поиска узких мест (bottlenecks), так как он показывает реальное время выполнения каждого узла плана и фактическое количество обработанных строк.
  • Вывод: Содержит как оценки, так и фактические метрики (actual time, actual rows).
  • Важно: Так как запрос выполняется, будьте осторожны с UPDATE, DELETE, INSERT. Если нужно проанализировать такие запросы без изменения данных, их можно обернуть в транзакцию с ROLLBACK.
-- Показывает только предполагаемый план, выполняется мгновенно
EXPLAIN SELECT * FROM users WHERE age > 30;

-- Выполняет запрос и показывает план с фактическими метриками
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;