La bitmap delle pagine viene creata dinamicamente per ogni query. Non viene memorizzato nella cache né riutilizzato e viene eliminato al termine della scansione dell'indice bitmap.
Non ha senso creare la bitmap della pagina in anticipo perché il suo contenuto dipende dai predicati della query .
Supponiamo che stai cercando x=1 and y=2
. Hai indici b-tree su x
e y
. PostgreSQL non combina x
e y
in una bitmap, quindi cercare la bitmap. Esegue la scansione dell'indice x
per l'indirizzo di tutte le pagine con x=1
e crea una bitmap in cui le pagine che potrebbero contenere x=1
sono vere. Quindi esegue la scansione di y
cercando gli indirizzi di pagina in cui y
potrebbe essere uguale a 2
, creando una bitmap da quello. Quindi li AND per trovare le pagine in cui entrambi x=1
e y=2
potrebbe essere vero. Infine, scansiona la tabella da solo, leggendo solo le pagine che potrebbero contenere valori candidati, leggendo ogni pagina e mantenendo solo le righe dove x=1 and y=2
.
Ora, se stai cercando qualcosa come un indice bitmap predefinito memorizzato nella cache, c'è una cosa del genere in PostgreSQL 9.5:Indici BRIN . Questi sono destinati a tabelle molto grandi e forniscono un modo per trovare intervalli della tabella che possono essere ignorati perché è noto che non contengono un valore desiderato.