Чтение плана запроса (EXPLAIN)
EXPLAIN показывает, как именно БД собирается выполнять запрос и сколько это будет стоить.
Почему это важно: Без EXPLAIN оптимизация запросов превращается в гадание на кофейной гуще.
Главная идея
План запроса — это дерево операций (сканы, join'ы, сортировки), которое можно прочитать и улучшить.
Как это выглядит на практике
- Запускаем EXPLAIN ANALYZE на медленном запросе.
- Видим Seq Scan там, где ожидался Index Scan.
- Смотрим, почему индекс не используется (например, не подходит тип).
- Исправляем запрос или индекс — и план меняется на ожидаемый.
Что происходит под капотом
- Seq Scan — последовательное чтение всей таблицы.
- Index Scan — поиск по индексу с обращением к таблице.
- Index Only Scan — чтение только из индекса (covering).
- Nested Loop / Hash Join / Merge Join — три основных способа объединять таблицы.
- Cost vs actual time — оптимизатор оценивает по статистике, реальное время может отличаться.
Типичные ошибки и заблуждения
- Ошибка: EXPLAIN без ANALYZE достаточно. Без ANALYZE вы видите оценку, а не реальное время.
- Ошибка: высокая cost = плохо. Cost — это абстрактная единица, важно сравнивать варианты.
- Ошибка: Seq Scan — всегда плохо. На маленькой таблице он быстрее индекса.
- Ошибка: ANALYZE на проде безопасно. Запрос реально выполнится — будьте осторожны с записью.
Ключевые выводы
- Без EXPLAIN ANALYZE нет оптимизации.
- План — это дерево, читай снизу вверх.
- Сравнивай оценку и реальные строки (rows estimated vs actual).
- Большая разница оценки и факта = устаревшая статистика.
Термины урока
Query planner — компонент СУБД, выбирающий план выполнения.
Statistics — данные о распределении значений в таблицах.
ANALYZE — команда обновления статистики.
Buffers — сколько страниц данных пришлось прочитать.
Связь с работой backend-разработчика
Умение читать EXPLAIN отличает джуна от мидла в работе с базами данных.
Мини-разбор реальной ситуации
Запрос отчёта по продажам выполнялся 30 секунд. EXPLAIN показал Nested Loop вместо Hash Join из-за устаревшей статистики. ANALYZE таблицы — и запрос стал работать за 200 мс.
Что запомнить
- EXPLAIN ANALYZE — твой главный инструмент.
- Читай план снизу вверх.
- Смотри estimated vs actual rows.
Итог
EXPLAIN — это рентген базы данных. Без него вы лечите вслепую.
Комментарии к уроку
Войдите, чтобы оставить комментарий.
Пока нет комментариев — будьте первым.