Что делает ключевое слово EXPLAIN в SQL?

Ответ

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

Что показывает EXPLAIN:

  • Тип доступа к данным (например, полное сканирование таблицы ALL, доступ по индексу index, диапазон range).
  • Используемые индексы.
  • Предполагаемое количество обрабатываемых строк.
  • Дополнительные операции (сортировка, использование временных таблиц).

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

EXPLAIN SELECT name, email FROM users WHERE city = 'Moscow' AND age > 25;

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

  1. Ищите операции ALL (полное сканирование таблицы) — это главный кандидат для создания индекса.
  2. Проверяйте колонку key — убедитесь, что используется наиболее подходящий индекс.
  3. Анализируйте rows — большое число означает, что запрос обрабатывает много данных.

EXPLAIN не выполняет запрос, а только показывает, как он будет выполнен.

Ответ 18+ 🔞

А, слушай, про эту штуку EXPLAIN, ну, это же просто мастхэв, когда запросы тормозят как последняя кобыла в гору! Представь, ты пишешь запрос, а он выполняется три часа, и ты сидишь, блядь, и думаешь: "Ну что за пиздец? Вроде всё просто!"

А потом вспоминаешь про EXPLAIN, и он тебе такой, как рентген, показывает всю подноготную, блядь! Вот смотри, что он вытворяет:

Что он там, сука, показывает:

  • Как он лезет в таблицу — либо как слон в посудной лавке (ALL, всю таблицу читает), либо по-умному, по индексам (index, range). Если видишь ALL — это, считай, красная тряпка, пора ебашить индексы.
  • Какие индексы, блядь, использует — или не использует, что ещё хуже.
  • Сколько строк, по его мнению, перелопатит — цифра в rows. Если там овердохуища — всё, пиши пропало, запрос будет жрать ресурсы.
  • Какую ещё хуйню будет делать — сортировать, во временные таблицы скидывать, соединять — всё распишет, сволочь.

Вот, смотри, как это выглядит в жизни, на примере MySQL:

EXPLAIN SELECT name, email FROM users WHERE city = 'Moscow' AND age > 25;

Ты этот запрос не выполнишь, нет! Он тебе просто план на бумажке выдаст, типа "я, блядь, буду делать вот так". А ты смотришь и думаешь: "Ага, сука, понятно".

Как этим пользоваться, чтобы не выть волком:

  1. Ищешь ALL в колонке type. Нашёл? Ну всё, дружок, это главный тормоз. Значит, таблицу всю читает, как книгу от корки до корки. Надо индекс прикручивать на те поля, по которым WHERE фильтрует.
  2. Смотришь в key. Используется ли индекс вообще? Или там NULL красуется? Если NULL — это пиздец, оптимизатор проигнорировал все твои красивые индексы, ищет по-старинке.
  3. Обращаешь внимание на rows. Если там число больше, чем твоё терпение, значит, запрос будет долго ебаться с кучей данных. Может, условие кривое, может, индекс не тот.

Короче, EXPLAIN — это как взять запрос на допрос с пристрастием. Он сам запрос не выполнит, но расскажет по косточкам, как его будут пытать движок базы данных. Без него оптимизация — это как тыкать пальцем в небо, надеясь, блядь, попасть.