Ответ
Команда EXPLAIN
в СУБД используется для получения плана выполнения SQL-запроса, который строит оптимизатор базы данных. Это ключевой инструмент для анализа и оптимизации производительности запросов.
Основные задачи, которые решает EXPLAIN
:
- Выявление узких мест: Показывает, какие части запроса выполняются неэффективно.
- Анализ использования индексов: Помогает понять, используются ли существующие индексы, и нужны ли новые.
- Оценка стоимости запроса: Демонстрирует, какие операции являются самыми "дорогими" (например, полное сканирование таблицы —
Seq Scan
).
Для получения не только предполагаемого, но и фактического плана выполнения с реальным временем и количеством строк, используется EXPLAIN ANALYZE
.
Пример для PostgreSQL:
-- Показывает предполагаемый план
EXPLAIN SELECT * FROM users WHERE id = 42;
-- Выполняет запрос и показывает фактический план
EXPLAIN ANALYZE SELECT * FROM users WHERE id = 42;
Пример вывода:
Index Scan using users_pkey on users (cost=0.15..8.17 rows=1 width=72) (actual time=0.021..0.022 rows=1 loops=1)
Index Cond: (id = 42)
Planning Time: 0.078 ms
Execution Time: 0.043 ms
Ключевые параметры в выводе:
cost
: Оценочная стоимость операции в условных единицах.rows
: Ожидаемое количество строк.actual time
: Фактическое время выполнения (при использованииANALYZE
).scan type
: Тип сканирования (Seq Scan
— плохо,Index Scan
— хорошо).
В Go для анализа плана можно выполнить такой запрос через database/sql
и проанализировать его текстовый вывод.