Ответ
Оба команды анализируют план выполнения запроса, но делают это по-разному.
-
EXPLAIN- Что делает: Показывает предполагаемый план выполнения запроса, который оптимизатор СУБД собирается использовать. Запрос не выполняется.
- Вывод: Оценки стоимости операций, порядок соединения таблиц, используемые индексы, предполагаемое количество обрабатываемых строк.
- Цель: Быстрый анализ потенциальных проблем (отсутствие индексов, неоптимальные соединения) без накладных расходов на выполнение.
EXPLAIN SELECT * FROM orders WHERE customer_id = 100;
-
EXPLAIN ANALYZE- Что делает: Выполняет запрос фактически и показывает реальный план выполнения вместе с измеренными метриками.
- Вывод: Включает все данные
EXPLAIN, плюс фактические времена выполнения каждого шага, реальное количество возвращенных строк, использование буферов в памяти. - Цель: Получить точную картину производительности запроса. Из-за выполнения запроса может быть ресурсоемким для больших таблиц.
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 100;
| Ключевые отличия: | Аспект | EXPLAIN |
EXPLAIN ANALYZE |
|---|---|---|---|
| Выполнение запроса | Нет | Да | |
| Данные | Прогнозы оптимизатора | Фактические измерения | |
| Скорость | Быстро | Медленно (зависит от запроса) | |
| Использование | Предварительный анализ, поиск узких мест | Точная диагностика производительности |
Практический совет: Сначала используйте EXPLAIN для быстрой проверки плана. Если проблема неочевидна или нужны точные данные, запустите EXPLAIN ANALYZE.