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

Ответ

Команда 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)

Это ключевой инструмент для любого бэкенд-разработчика для диагностики и ускорения работы с базой данных.