Ответ
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';
Ключевые моменты для анализа:
- Полное сканирование таблицы (Seq Scan) на больших таблицах — главный признак для создания индекса.
- Высокая оценочная стоимость (cost) узлов плана указывает на потенциально «тяжелые» операции.
- Расхождение между
rows(оценка) и фактическим количеством строк говорит об устаревшей статистике, которую нужно обновить (ANALYZE table_name;).