Sobes.tech
Back to questions
Junior
3

Как пользоваться EXPLAIN и EXPLAIN ANALYZE для анализа производительности запросов и на что обращать внимание в плане выполнения запроса?

Companies where asked
Позитив Технолоджис

Answer from AI

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)

Анализируя вывод, ищите операции с большими затратами времени и попытайтесь оптимизировать запрос, добавив индексы, переписав соединения или фильтры.