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