PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Comprensione degli indici bitmap in postgresql

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.