postgresql - online - Что такое «Сканирование растровой карты» в плане запроса?



postgresql план запроса (1)

Я хочу знать принцип «сканирования кучи битмапа», я знаю, что это часто происходит, когда я выполняю запрос с OR в состоянии.

Кто может объяснить принцип «сканирования кучи битмапа»?

https://code.i-harness.com


Лучшее объяснение приходит от Тома Лейна , который является автором алгоритма, если я не ошибаюсь. См. Также статью в Википедии .

Короче говоря, это немного похоже на сканирование seq. Разница заключается в том, что вместо того, чтобы посещать каждую страницу диска, индексы индексирования растрового индекса AND и OR применяют индексы вместе и посещают только те страницы диска, которые ему нужны.

Это отличается от сканирования индекса, где индекс посещается по строкам по порядку - это означает, что страница диска может посещаться несколько раз.

Re: вопрос в вашем комментарии ... Да, это именно так.

Сканирование индекса будет проходить через строки один за другим, открывая страницы диска снова и снова, столько раз, сколько необходимо (некоторые, конечно, останутся в памяти, но вы получите смысл).

Сканирование растрового индекса будет последовательно открывать краткий список дисковых страниц и захватывать каждую применимую строку в каждом из них (следовательно, так называемый перепроверка, который вы видите в планах запросов).

Обратите внимание, как в стороне, как порядок кластеризации / строки влияет на связанные затраты с помощью любого метода. Если строки находятся повсюду в случайном порядке, индекс растрового изображения будет дешевле. (И, на самом деле, если они действительно повсюду , сканирование seq будет самым дешевым, поскольку сканирование растрового индекса не обойдется без каких-либо издержек.)





sql-execution-plan