Пропуски Junior EXPLAIN и оптимизация спрашивают часто обновлено

Чтение плана: полный просмотр и фильтр

Вопрос

Запрос 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

Попробуйте сами

Заполните пропуски по номерам.

1
2
3
Показать ответ и разбор

Коротко

Без подходящего индекса таблица читается целиком: узел Seq Scan. Условие из WHERE проверяется для каждой строки, это строка Filter, а Rows Removed by Filter показывает, сколько строк условие отбросило.

Что в пропусках

1

Seq Scan

2

Filter

3

Filter

Разбор

Без подходящего индекса таблица читается целиком: узел Seq Scan. Условие из WHERE проверяется для каждой строки, это строка Filter, а Rows Removed by Filter показывает, сколько строк условие отбросило. Если отброшено почти всё, а вернулось мало, это повод для индекса. Здесь наоборот: вернулось 90% таблицы, и Seq Scan оптимален.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме