Что такое EXPLAIN в SQL и для чего он используется?

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

Ответ

EXPLAIN — это команда SQL, которая показывает план выполнения запроса, а не выполняет его. Это ключевой инструмент для анализа и оптимизации производительности запросов.

Основная цель: Увидеть, как СУБД будет получать данные (использует ли индексы, делает ли полное сканирование таблицы, как соединяет таблицы), чтобы найти «узкие» места.

Пример использования:

EXPLAIN SELECT id, name FROM users WHERE email = 'user@example.com';
Ключевые элементы вывода (на примере MySQL): Столбец Значение Что означает
type const, eq_ref, ref, range, index, ALL Тип доступа к данным. ALL — самое дорогое (полное сканирование таблицы).
key idx_email Индекс, который будет использован. NULL — индекс не используется.
rows 1 Оценочное количество строк, которые будет проверять движок.
Extra Using where, Using index Дополнительная информация. Using index — хороший знак (запрос выполнен только по индексу).

Как использовать для оптимизации:

  1. Запустите EXPLAIN для медленного запроса.
  2. Если type = ALL и key = NULL, вероятно, не хватает индекса.
  3. Создайте индекс для столбцов в условиях WHERE, JOIN, ORDER BY.
    CREATE INDEX idx_user_email ON users(email);
  4. Запустите EXPLAIN снова, чтобы убедиться, что план улучшился.

Расширенные варианты:

  • EXPLAIN ANALYZE (PostgreSQL, MySQL 8.0.18+): Выполняет запрос и показывает фактическое время выполнения и количество строк на каждом этапе, что точнее.