Что такое EXPLAIN в SQL и какую информацию он предоставляет?

Ответ

EXPLAIN — это команда в SQL, которая возвращает план выполнения запроса, сгенерированный оптимизатором базы данных. Она не выполняет сам запрос, а показывает, как СУБД собирается его выполнить.

EXPLAIN помогает понять:

  1. Порядок и метод доступа к таблицам: Будет ли это полное сканирование таблицы (Seq Scan), сканирование по индексу (Index Scan) или другой метод.
  2. Используемые индексы: Какие именно индексы будут задействованы для ускорения выборки.
  3. Операции соединения (Joins): Какой алгоритм будет использован для соединения таблиц (например, Nested Loop, Hash Join, Merge Join).
  4. Оценочная стоимость (Cost): Условная оценка ресурсов, необходимых для выполнения запроса. Состоит из стоимости запуска и общей стоимости. Это не время, а абстрактные единицы.
  5. Оценочное количество строк (Rows): Предполагаемое количество строк, которое вернет каждая операция.

Пример для PostgreSQL:

EXPLAIN SELECT * FROM users WHERE id = 42;

Результат:

                          QUERY PLAN
--------------------------------------------------------------
 Index Scan using users_pkey on users  (cost=0.15..8.17 rows=1 width=36)
   Index Cond: (id = 42)

Этот план показывает, что будет использован индекс users_pkey, что является очень эффективным.

EXPLAIN ANALYZE

Для получения более точной информации используется EXPLAIN ANALYZE. Эта команда выполняет запрос и показывает не только план, но и реальное время выполнения и количество строк на каждом шаге. Это мощный инструмент для отладки медленных запросов.