SQL EXPLAIN ANALYZE: посмотреть план запроса

Категория: Postgresql · Язык: SQL · Обновлено:

EXPLAIN показывает план, который выбрала СУБД; EXPLAIN ANALYZE дополнительно выполняет запрос и показывает фактическое время и число строк. Сравнивайте оценочные rows с actual rows, чтобы понять, насколько точна статистика.

Показать план без запуска запроса

SQL
EXPLAIN SELECT * FROM (VALUES (1), (2), (3)) AS items(id) WHERE id > 1;

Этот режим не выполняет SELECT и подходит для первичной оценки плана.

Выполнить запрос и посмотреть фактические значения

SQL
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM (VALUES (1), (2), (3)) AS items(id) WHERE id > 1;

ANALYZE выполняет команду. Для UPDATE, DELETE или INSERT используйте транзакцию и ROLLBACK, если нужно измерить запрос без сохранения изменений.

Поле плана

Что показывает

cost

Оценку относительной стоимости, не миллисекунды

rows

Оценочное число выходных строк

actual time

Фактическое время узла плана

Buffers

Чтения и попадания в буферный кеш

Почему план показывает Seq Scan?

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

Означает ли большой cost медленный запрос?

cost — внутренняя сравнительная оценка планировщика, а не время в миллисекундах. Для реального времени используйте ANALYZE и смотрите actual time.