Ответ
Команда 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 и проанализировать его текстовый вывод.