Sobes.tech
Junior

Hoe gebruik je EXPLAIN en EXPLAIN ANALYZE om de prestaties van queries te analyseren en waar moet je op letten in het uitvoeringsplan van de query?

sobes.tech AI

Antwoord van 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)

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