Risposte:
La migliore spiegazione viene da Tom Lane , che è l'autore dell'algoritmo a meno che non mi sbagli. Vedi anche l' articolo di wikipedia .
In breve, è un po 'come una scansione sequenziale. La differenza è che, invece di visitare ogni pagina del disco, un indice bitmap esegue la scansione degli indici AND e OR applicabili insieme e visita solo le pagine del disco di cui ha bisogno.
Questo è diverso da una scansione dell'indice, in cui l'indice viene visitato riga per riga in ordine, il che significa che una pagina del disco può essere visitata più volte.
Ri: la domanda nel tuo commento ... Sì, è esattamente così.
Una scansione dell'indice passerà attraverso le righe una per una, aprendo le pagine del disco ancora e ancora, tutte le volte che sarà necessario (alcune rimarranno ovviamente in memoria, ma ottieni il punto).
Una scansione dell'indice bitmap aprirà in sequenza un breve elenco di pagine del disco e acquisirà ogni riga applicabile in ciascuna di esse (da qui il cosiddetto ricontrollo cond che vedi nei piani di query).
Nota, per inciso, in che modo il raggruppamento / l'ordine di riga influisce sui costi associati con entrambi i metodi. Se le righe sono ovunque in un ordine casuale, un indice bitmap sarà più economico. (E, infatti, se sono veramente tutto il luogo, una scansione ss sarà più economico, dal momento che un indice di scansione bitmap non è senza un certo overhead.)
index-only scan
momento in cui si accede solo alla colonna indicizzata nella query. in questo caso, index-only scan
non è necessario accedere ai dati dell'heap (pagina dati): postgresql.org/docs/12/indexes-index-only-scans.html