Охватываемый индекс, по-видимому, не является оптимальным. Ожидание 0 выборок кучи в плане выполнения

#postgresql #indexing

Вопрос:

Я использую образец базы данных pagilia на Postgres 14. Я создаю, как мне кажется, охватываемый индекс, за которым следует запрос, основанный на примере онлайн-курса…

 CREATE INDEX idx_film_cover ON film (rating, length, title, replacement_cost, rental_rate);

EXPLAIN ANALYSE SELECT title, length, rating, replacement_cost, rental_rate
FROM film
WHERE length BETWEEN 60 AND 70 AND rating = 'G';
 

…тем не менее, я все еще получаю сканирование кучи растровых изображений…

 Bitmap Heap Scan on film as film
Recheck Cond: ((rating = 'G'::mpaa_rating) AND (length >= 60) AND (length <= 70))
  ->  Bitmap Index Scan using idx_film_cover
      Index Cond: ((rating = 'G'::mpaa_rating) AND (length >= 60) AND (length <= 70))
 

…пример онлайн-курса содержит нулевые кучи. Может ли кто-нибудь помочь мне понять, почему я получаю другой план выполнения?

Комментарии:

1. Возможно, вы не VACUUM накрывали на стол.

2. Пожалуйста, покажите нам полный план выполнения, созданный с помощью explain (analyze, buffers)

3. Возможно, вы знаете, что у вас их не должно быть, Постгрес этого не знает . Он должен сгенерировать, а затем выполнить план, чтобы обнаружить его.

4. @a_horse_with_no_name «»Сканирование кучи растровых изображений на пленке (стоимость = 4,47..39,34 строки=15 ширина=34) (фактическое время=0,473..1,202 строки=18 петель=1) Перепроверьте Cond: ((рейтинг = «G»::mpaa_rating) И (длина >= 60) И (длина > Блоки кучи: точное=14 Буферов: общее попадание=17 чтение=2 -> Сканирование индекса растрового изображения на idx_film_cover (стоимость = 0,00..4,46 строк=15 ширина=0) (фактическое время=0,264..0,264 строк=18 циклов=1) Индекс Cond: ((рейтинг = ‘G’:: mpaa_rating) И (длина >>= 60) И (длина >> Буферы: общее попадание=3 чтение=2 Время планирования: 0,188 мс Время выполнения: 1,244 мс»‘