Чем EXPLAIN ANALYZE отличается от обычного EXPLAIN?
- Что показывает EXPLAIN ANALYZE?
EXPLAIN — прогноз оптимизатора; EXPLAIN ANALYZE — запрос выполняется, и видны фактические строки, время каждого узла и число повторений.
- Сравнивать оценку строк с фактом — расхождение указывает на статистику
- BUFFERS — сколько страниц из кэша и с диска
- ANALYZE реально выполняет UPDATE/DELETE — оборачивать в транзакцию с ROLLBACK
А ещё Время с ANALYZE немного выше из-за измерений
Подробно
Самое ценное в фактическом плане — расхождение между ожидаемым и реальным числом строк. Если планировщик рассчитывал на десять строк, а пришло сто тысяч, значит статистика устарела или оценка селективности неверна, и именно отсюда берутся неудачные соединения вложенными циклами. Важное предупреждение по эксплуатации: EXPLAIN ANALYZE действительно выполняет запрос, поэтому для INSERT, UPDATE и DELETE его запускают внутри транзакции с последующим откатом. Обновление статистики — отдельная команда ANALYZE, и путать её с этим режимом не стоит.
Что хотят услышать
- Прогноз против факта.
- Что смотреть в выводе.
- Осторожность с изменяющими запросами.
Частые ошибки
- Запустить EXPLAIN ANALYZE на изменяющем запросе в бою без транзакции.
- Смотреть только на итоговую стоимость, игнорируя расхождение оценок и факта.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Разница только в формате вывода
- ✓ANALYZE реально выполняет запрос и показывает фактические время и число строк
- ✗EXPLAIN ANALYZE работает только с SELECT
- ✗ANALYZE пересобирает статистику таблицы перед построением плана, поэтому оценки точнее
Что спросят дальше
- О чём говорит расхождение между rows и actual rows?
- Почему nested loop с неверной оценкой особенно опасен?
Разбор темы
- Практика оптимизации запросов
EXPLAIN и чтение плана, порядок колонок индекса, keyset-пагинация и ловушки, мешающие индексу.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.