Ответ
Команда 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
. Это означает, что база данных теперь может мгновенно найти нужные строки с помощью индекса, что кардинально ускоряет запрос.