Назад к вопросам
Junior
4
Как пользоваться EXPLAIN и EXPLAIN ANALYZE для анализа производительности запросов и на что обращать внимание в плане выполнения запроса?
Компании, где спрашивали
Позитив Технолоджис
Ответ от нейросети
sobes.tech AI
Команды EXPLAIN и EXPLAIN ANALYZE используются для анализа плана выполнения SQL-запросов и помогают понять, как СУБД обрабатывает запрос.
EXPLAINпоказывает предполагаемый план выполнения запроса без его фактического выполнения.EXPLAIN ANALYZEвыполняет запрос и показывает реальное время выполнения каждой операции и количество обработанных строк.
На что обращать внимание:
- Типы операций: Sequential Scan (полный перебор), Index Scan (использование индекса), Nested Loop, Hash Join и т.д. Индексные сканирования обычно быстрее.
- Порядок операций: как соединяются таблицы, какие фильтры применяются.
- Оценка и фактическое количество строк: большая разница может указывать на устаревшую статистику.
- Время выполнения каждой операции: узкие места — операции с самым большим временем.
- Использование индексов: отсутствие индексов может привести к полным сканированиям.
Пример использования в Go (через database/sql):
rows, err := db.Query("EXPLAIN ANALYZE SELECT * FROM bookings WHERE user_id = ?", userID)
if err != nil {
log.Fatal(err)
}
var plan string
for rows.Next() {
var line string
if err := rows.Scan(&line); err != nil {
log.Fatal(err)
}
plan += line + "\n"
}
fmt.Println(plan)
Анализируя вывод, ищите операции с большими затратами времени и попытайтесь оптимизировать запрос, добавив индексы, переписав соединения или фильтры.