De bitmap van pagina's wordt dynamisch gemaakt voor elke query. Het wordt niet in de cache opgeslagen of opnieuw gebruikt en wordt aan het einde van de bitmapindexscan verwijderd.
Het heeft geen zin om de paginabitmap vooraf te maken omdat de inhoud ervan afhangt van de query-predikaten .
Stel dat u zoekt naar x=1 and y=2
. Je hebt b-tree indexen op x
en y
. PostgreSQL combineert x
niet en y
in een bitmap en zoek vervolgens in de bitmap. Het scant index x
voor het pagina-adres van alle pagina's met x=1
en maakt een bitmap waar de pagina's die x=1
. kunnen bevatten zijn waar. Vervolgens scant het y
op zoek naar de pagina-adressen waar y
kan gelijk zijn aan 2
, daar een bitmap van maken. Vervolgens EN moet ze pagina's vinden waar zowel x=1
en y=2
misschien waar is. Ten slotte scant het zelf de tabel, waarbij alleen de pagina's worden gelezen die kandidaat-waarden kunnen bevatten, elke pagina wordt gelezen en alleen de rijen worden bewaard waar x=1 and y=2
.
Als u nu op zoek bent naar zoiets als een in de cache opgeslagen, vooraf gebouwde bitmapindex, dan is er zoiets in PostgreSQL 9.5:BRIN-indexen . Deze zijn bedoeld voor zeer grote tabellen en bieden een manier om bereiken van de tabel te vinden die kunnen worden overgeslagen omdat bekend is dat ze geen gewenste waarde bevatten.