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