Получить доступ

Чем EXPLAIN ANALYZE отличается от обычного EXPLAIN?

MiddleОптимизация запросовPostgreSQL
Ещё спрашивают так:
  • Что показывает EXPLAIN ANALYZE?
Коротко

EXPLAIN — прогноз оптимизатора; EXPLAIN ANALYZE — запрос выполняется, и видны фактические строки, время каждого узла и число повторений.

  • Сравнивать оценку строк с фактом — расхождение указывает на статистику
  • BUFFERS — сколько страниц из кэша и с диска
  • ANALYZE реально выполняет UPDATE/DELETE — оборачивать в транзакцию с ROLLBACK

А ещё Время с ANALYZE немного выше из-за измерений

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Самое ценное в фактическом плане — расхождение между ожидаемым и реальным числом строк. Если планировщик рассчитывал на десять строк, а пришло сто тысяч, значит статистика устарела или оценка селективности неверна, и именно отсюда берутся неудачные соединения вложенными циклами. Важное предупреждение по эксплуатации: EXPLAIN ANALYZE действительно выполняет запрос, поэтому для INSERT, UPDATE и DELETE его запускают внутри транзакции с последующим откатом. Обновление статистики — отдельная команда ANALYZE, и путать её с этим режимом не стоит.

Что хотят услышать

  • Прогноз против факта.
  • Что смотреть в выводе.
  • Осторожность с изменяющими запросами.

Частые ошибки

  • Запустить EXPLAIN ANALYZE на изменяющем запросе в бою без транзакции.
  • Смотреть только на итоговую стоимость, игнорируя расхождение оценок и факта.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓EXPLAIN показывает предполагаемый план с оценками, а EXPLAIN ANALYZE реально выполняет запрос и показывает фактическое время и число строк
  • ✗EXPLAIN ANALYZE работает только с SELECT
  • ✗Разница только в формате вывода
  • ✗EXPLAIN ANALYZE обновляет статистику таблицы

Что спросят дальше

  • О чём говорит расхождение между rows и actual rows?
  • Почему nested loop с неверной оценкой особенно опасен?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем