Для чего используется команда EXPLAIN в SQL?

«Для чего используется команда EXPLAIN в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

  • Тип доступа к таблице: Используется ли индекс (Index Scan), полное сканирование (Seq Scan/Full Table Scan) или другой метод.
  • Порядок и алгоритм соединений (JOIN).
  • Оценочную стоимость операций (cost) в условных единицах.
  • Оценочное количество обрабатываемых строк (rows).
  • Применяемые фильтры (WHERE) и условия.

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

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

Возможный вывод:

Index Scan using idx_user_email on users  (cost=0.15..8.17 rows=1 width=36)
  Index Cond: (email = 'test@example.com'::text)

Это показывает, что запрос использует индекс idx_user_email.

EXPLAIN ANALYZE: Для получения реальной, а не оценочной, статистики используется EXPLAIN ANALYZE. Он выполняет запрос и добавляет фактические данные:

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

Ключевые моменты для анализа:

  1. Полное сканирование таблицы (Seq Scan) на больших таблицах — главный признак для создания индекса.
  2. Высокая оценочная стоимость (cost) узлов плана указывает на потенциально «тяжелые» операции.
  3. Расхождение между rows (оценка) и фактическим количеством строк говорит об устаревшей статистике, которую нужно обновить (ANALYZE table_name;).