Ответ
Обе команды используются для анализа планов выполнения 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;