SQL EXPLAIN ANALYZE: посмотреть план запроса
EXPLAIN показывает план, который выбрала СУБД; EXPLAIN ANALYZE дополнительно выполняет запрос и показывает фактическое время и число строк. Сравнивайте оценочные rows с actual rows, чтобы понять, насколько точна статистика.
Показать план без запуска запроса
EXPLAIN SELECT * FROM (VALUES (1), (2), (3)) AS items(id) WHERE id > 1;Этот режим не выполняет SELECT и подходит для первичной оценки плана.
Выполнить запрос и посмотреть фактические значения
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM (VALUES (1), (2), (3)) AS items(id) WHERE id > 1;ANALYZE выполняет команду. Для UPDATE, DELETE или INSERT используйте транзакцию и ROLLBACK, если нужно измерить запрос без сохранения изменений.
Поле плана | Что показывает |
|---|---|
| Оценку относительной стоимости, не миллисекунды |
| Оценочное число выходных строк |
| Фактическое время узла плана |
| Чтения и попадания в буферный кеш |
Почему план показывает Seq Scan?
Полное сканирование может быть быстрее индекса для маленькой таблицы или запроса, который возвращает большую долю строк. Проверьте статистику, селективность фильтра и фактические измерения.
Означает ли большой cost медленный запрос?
cost — внутренняя сравнительная оценка планировщика, а не время в миллисекундах. Для реального времени используйте ANALYZE и смотрите actual time.