Чем отличаются команды EXPLAIN и EXPLAIN ANALYZE в PostgreSQL?

Ответ

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

EXPLAIN

Показывает предполагаемый (estimated) план выполнения, который строит оптимизатор базы данных. Запрос при этом не выполняется.

  • Что делает: Анализирует запрос, статистику таблиц и индексы, чтобы предсказать, как он будет выполняться.
  • Преимущества: Быстро и безопасно. Идеально для быстрой проверки использования индексов.
-- Показывает только план, без выполнения
EXPLAIN SELECT * FROM users WHERE registration_date > '2023-01-01';

EXPLAIN ANALYZE

Сначала строит план, а затем реально выполняет запрос и показывает фактический план с реальными метриками времени и количества строк.

  • Что делает: Выполняет запрос и сравнивает оценки планировщика с реальными результатами.
  • Преимущества: Предоставляет точную информацию о производительности, включая реальное время выполнения каждого шага (actual time). Помогает выявить неверные оценки планировщика.
-- Выполняет запрос и показывает план с реальными метриками
EXPLAIN ANALYZE SELECT * FROM users WHERE registration_date > '2023-01-01';

Ключевое различие

  • EXPLAIN — это гипотеза о том, как будет выполнен запрос.
  • EXPLAIN ANALYZE — это эксперимент, который выполняет запрос и показывает, как он был выполнен на самом деле.

Важно: Используйте EXPLAIN ANALYZE с осторожностью для UPDATE, DELETE, INSERT, так как команда реально выполнит изменение данных. Для таких запросов её лучше оборачивать в транзакцию с последующим ROLLBACK.