Как команда EXPLAIN помогает в оптимизации SQL-запросов

Ответ

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

Что можно узнать из плана выполнения:

  • Порядок соединения таблиц (JOIN).
  • Способ доступа к данным: полное сканирование таблицы (Full Table Scan) или использование индекса (Index Scan).
  • Используемые индексы (если есть).
  • Примерное количество строк, которые будут обработаны на каждом шаге.
  • Необходимость во временных таблицах или сортировке (Using temporary, Using filesort).

Практический пример:

Предположим, запрос к большой таблице users выполняется медленно:

SELECT * FROM users WHERE email = 'test@example.com';

Выполним EXPLAIN для этого запроса:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

Если в выводе мы видим type: ALL, это означает полный перебор таблицы (Full Table Scan) — самое узкое место. Оптимизатор вынужден проверять каждую строку, чтобы найти нужную.

Решение:

Создадим индекс для колонки email:

CREATE INDEX idx_users_email ON users(email);

После этого повторный вызов EXPLAIN покажет, что type изменился на ref или const, а в поле key будет указан наш новый индекс idx_users_email. Это означает, что база данных теперь может мгновенно найти нужные строки с помощью индекса, что кардинально ускоряет запрос.