Die Bitmap der Seiten wird dynamisch für jede Abfrage erstellt. Es wird nicht zwischengespeichert oder wiederverwendet und am Ende des Bitmap-Index-Scans verworfen.
Es macht keinen Sinn, die Seitenbitmap im Voraus zu erstellen, da ihr Inhalt von den Abfrageprädikaten abhängt .
Angenommen, Sie suchen nach x=1 and y=2
. Sie haben B-Tree-Indizes auf x
und y
. PostgreSQL kombiniert x
nicht und y
in eine Bitmap und suchen Sie dann die Bitmap. Es scannt den Index x
für die Seitenadresse aller Seiten mit x=1
und erstellt eine Bitmap, in der die Seiten x=1
enthalten könnten sind wahr. Dann scannt es y
Suchen Sie nach den Seitenadressen, bei denen y
könnte gleich 2
sein , daraus eine Bitmap erstellen. Dann werden sie UND-verknüpft, um Seiten zu finden, auf denen beide x=1
sind und y=2
könnte wahr sein. Schließlich scannt es die Tabelle selbst, liest nur die Seiten, die Kandidatenwerte enthalten könnten, liest jede Seite und behält nur die Zeilen, in denen x=1 and y=2
.
Wenn Sie nun nach etwas wie einem zwischengespeicherten, vorgefertigten Bitmap-Index suchen, gibt es so etwas in PostgreSQL 9.5:BRIN-Indizes . Diese sind für sehr große Tabellen gedacht und bieten eine Möglichkeit, Bereiche der Tabelle zu finden, die übersprungen werden können, weil sie bekanntermaßen keinen gewünschten Wert enthalten.