Я хочу знать принцип «сканирования кучи Bitmap», я знаю, что это часто происходит, когда я выполняю запрос с OR
условием.
Кто может объяснить принцип «сканирования кучи Bitmap»?
Я хочу знать принцип «сканирования кучи Bitmap», я знаю, что это часто происходит, когда я выполняю запрос с OR
условием.
Кто может объяснить принцип «сканирования кучи Bitmap»?
Лучшее объяснение исходит от Тома Лейна , автора алгоритма, если я не ошибаюсь. См. Также статью в Википедии .
Короче говоря, это немного похоже на последовательное сканирование. Разница в том, что вместо посещения каждой страницы диска, индекс растрового изображения сканирует соответствующие индексы с помощью операций И и ИЛИ и посещает только те страницы диска, которые ему необходимы.
Это отличается от сканирования индекса, при котором индекс просматривается построчно по порядку - это означает, что страница диска может посещаться несколько раз.
Re: вопрос в вашем комментарии ... Ага, именно так.
Сканирование индекса будет проходить по строкам одну за другой, открывая страницы диска снова и снова, столько раз, сколько необходимо (некоторые, конечно, останутся в памяти, но суть вы поняли).
Сканирование растрового индекса последовательно открывает короткий список дисковых страниц и захватывает каждую применимую строку в каждой из них (отсюда так называемое условие повторной проверки, которое вы видите в планах запросов).
Обратите внимание на то, как кластеризация / порядок строк влияет на связанные затраты при любом методе. Если строки расположены повсюду в случайном порядке, индекс растрового изображения будет дешевле. (И на самом деле, если они действительно повсюду , последовательное сканирование будет самым дешевым, поскольку сканирование растрового индекса сопряжено с некоторыми накладными расходами.)
index-only scan
когда в запросе доступен только индексированный столбец. в этом случаеindex-only scan
не требуется доступ к данным кучи (страницы данных): postgresql.org/docs/12/indexes-index-only-scans.html