Чтение плана: полный просмотр и фильтр
Вопрос
Запрос SELECT * FROM orders WHERE status = 'paid', индекса по status нет. Заполни пропуски в настоящем плане PostgreSQL 16.
__(1)__ on orders (cost=0.00..19908.00 rows=898433 width=32) (actual time=0.029..143.411 rows=900000 loops=1)
__(2)__: (status = 'paid'::text)
Rows Removed by __(3)__: 100000
Planning Time: 1.208 ms
Execution Time: 165.897 ms
Попробуйте сами
Заполните пропуски по номерам.
Показать ответ и разбор
Коротко
Что в пропусках
Seq Scan
Filter
Filter
Разбор
Без подходящего индекса таблица читается целиком: узел Seq Scan. Условие из WHERE проверяется для каждой строки, это строка Filter, а Rows Removed by Filter показывает, сколько строк условие отбросило. Если отброшено почти всё, а вернулось мало, это повод для индекса. Здесь наоборот: вернулось 90% таблицы, и Seq Scan оптимален.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Последние заказы: какой узел в плане
Следующий вопрос
Сортировка ушла на диск: план и настройка