#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 мс»‘