Bitmapa stron jest tworzona dynamicznie dla każdego zapytania. Nie jest buforowany ani ponownie używany i jest odrzucany na końcu skanowania indeksu bitmapy.
Wcześniejsze tworzenie bitmapy strony nie ma sensu, ponieważ jej zawartość zależy od predykatów zapytania .
Załóżmy, że szukasz x=1 and y=2
. Masz indeksy b-drzewa na x
i y
. PostgreSQL nie łączy x
i y
do mapy bitowej, a następnie przeszukaj mapę bitową. Skanuje indeks x
dla adresu strony wszystkich stron z x=1
i tworzy bitmapę, w której strony, które mogą zawierać x=1
są prawdziwe. Następnie skanuje y
szukanie adresów stron, gdzie y
może równać się 2
, tworząc z tego bitmapę. Następnie ORAZ znajduje strony, na których oba x=1
i y=2
może być prawdą. Na koniec skanuje samą tabelę, odczytując tylko strony, które mogą zawierać wartości kandydujące, czytając każdą stronę i zachowując tylko wiersze, w których x=1 and y=2
.
Teraz, jeśli szukasz czegoś w rodzaju buforowanego, gotowego indeksu bitmapowego, w PostgreSQL 9.5 jest coś takiego:Indeksy BRIN . Są one przeznaczone dla bardzo dużych tabel i zapewniają sposób na znalezienie zakresów tabeli, które można pominąć, ponieważ wiadomo, że nie zawierają pożądanej wartości.