Какие поля возвращает оператор EXPLAIN в SQL?

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

Ответ

Оператор EXPLAIN (или EXPLAIN ANALYZE в PostgreSQL) возвращает план выполнения запроса. Ключевые поля в выводе MySQL/ MariaDB:

  • id: Уникальный идентификатор каждого шага в плане выполнения.
  • select_type: Тип операции SELECT (например, SIMPLE, PRIMARY, SUBQUERY, DERIVED).
  • table: Имя таблицы, к которой относится строка вывода.
  • partitions: Какие разделы (partitions) были затронуты.
  • type: Критически важное поле — тип соединения или доступа к таблице. От ALL (полное сканирование) до const/system (по уникальному ключу).
    • ALL: Наихудший вариант, сканирование всех строк.
    • index: Сканирование всего индекса.
    • range: Сканирование диапазона индекса.
    • ref/eq_ref: Поиск по не-уникальному/уникальному индексу.
    • const: Поиск по первичному или уникальному ключу, возвращает не более одной строки.
  • possible_keys: Какие индексы теоретически могут быть использованы для этой таблицы.
  • key: Фактически выбранный оптимизатором индекс.
  • key_len: Длина используемой части ключа индекса (в байтах).
  • ref: Какие столбцы или константы сравниваются с индексом (key).
  • rows: Оценочное количество строк, которое должно быть проверено.
  • filtered: Примерный процент строк, которые будут отфильтрованы условием WHERE.
  • Extra: Дополнительная информация о том, как выполняется запрос (например, Using where, Using index, Using temporary, Using filesort).

Пример для MySQL:

EXPLAIN SELECT * FROM orders WHERE customer_id = 100 AND status = 'shipped';

Результат может показать, используется ли индекс по customer_id, сколько строк примерно будет просмотрено (rows) и не пришлось ли делать временную таблицу или файловую сортировку (Extra).