Что делает команда EXPLAIN в SQL?

«Что делает команда EXPLAIN в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

EXPLAIN — это SQL-команда, которая показывает план выполнения запроса, составленный оптимизатором СУБД. Она не выполняет сам запрос, а анализирует, как он будет выполнен.

Зачем это нужно:

  • Выявить узкие места (отсутствие индексов, полные сканирования таблиц).
  • Оптимизировать сложные запросы.
  • Понять, почему запрос выполняется медленно.

Пример для MySQL/PostgreSQL:

EXPLAIN SELECT * FROM orders WHERE customer_id = 123 AND status = 'SHIPPED';
Ключевые элементы вывода (на примере MySQL): Столбец Значение Объяснение
type ref, ALL, index Тип доступа к таблице. ALL — тревожный знак (полное сканирование).
key idx_customer Используемый индекс. NULL — индекс не используется.
rows ~50 Оценочное количество строк для проверки.
Extra Using where Дополнительная информация (сортировка, временные таблицы).

В контексте Java/JPA:

  • В Hibernate можно включить логирование SQL и затем анализировать сгенерированные запросы через EXPLAIN.
  • Некоторые библиотеки (например, p6spy) позволяют автоматически добавлять EXPLAIN к логгируемым запросам.

EXPLAIN ANALYZE (в PostgreSQL, MySQL 8.0.18+): Фактически выполняет запрос и выдает реальные метрики выполнения (время, количество строк), что еще точнее.