Ответ
Команда EXPLAIN
— это инструмент в большинстве СУБД (например, PostgreSQL, MySQL), который показывает план выполнения SQL-запроса, сгенерированный оптимизатором базы данных. Он не выполняет сам запрос, а лишь описывает, как база данных собирается это сделать.
Основная цель — оптимизация медленных запросов. Анализ вывода EXPLAIN
помогает понять:
- Используются ли индексы или происходит полное сканирование таблицы (Full Table Scan).
- Какой тип соединения таблиц (JOIN) выбран (например, Nested Loops, Hash Join, Merge Join).
- В каком порядке соединяются таблицы.
- Приблизительную "стоимость" (cost) каждой операции, что позволяет найти самые затратные шаги.
Пример в PostgreSQL:
-- Показывает план
EXPLAIN SELECT * FROM users WHERE status = 'active';
-- Показывает план и выполняет запрос, собирая реальную статистику
EXPLAIN ANALYZE SELECT * FROM users WHERE status = 'active';
Как использовать в Go:
В Go EXPLAIN
можно выполнить как обычный RAW-запрос. Это особенно полезно при работе с ORM (например, GORM), чтобы проверить, какой SQL-запрос она генерирует.
// result будет содержать текстовое описание плана выполнения
var result string
db.Raw("EXPLAIN SELECT * FROM users WHERE status = ?", "active").Scan(&result)
fmt.Println(result)
Это ключевой инструмент для любого бэкенд-разработчика для диагностики и ускорения работы с базой данных.