Bitmappen av sidor skapas dynamiskt för varje fråga. Det cachelagras inte eller återanvänds och kasseras i slutet av bitmappsindexsökningen.
Det är inte meningsfullt att skapa sidans bitmapp i förväg eftersom innehållet beror på frågepredikaten .
Säg att du söker efter x=1 and y=2
. Du har b-tree index på x
och y
. PostgreSQL kombinerar inte x
och y
i en bitmapp och sök sedan i bitmappen. Den skannar index x
för sidadressen för alla sidor med x=1
och gör en bitmapp där sidorna som kan innehålla x=1
är sanna. Sedan skannar den y
letar efter sidadresserna där y
kan vara lika med 2
, gör en bitmapp från det. Sedan OCH hjälper den dem att hitta sidor där både x=1
och y=2
kan vara sant. Slutligen skannar den själva tabellen, läser endast de sidor som kan innehålla kandidatvärden, läser varje sida och behåller endast raderna där x=1 and y=2
.
Nu, om du letar efter något som ett cachat, förbyggt bitmappsindex, finns det något sådant i PostgreSQL 9.5:BRIN-index . Dessa är avsedda för mycket stora tabeller och ger ett sätt att hitta intervall i tabellen som kan hoppa över eftersom de är kända för att inte innehålla ett önskat värde.