2015-10-13 16 views
5

PostgreSQL 9.4indici undestanding bitmap in PostgreSQL

ho appena affrontare il nodo denominato Bitmap Index Scan e il concetto della cosiddetta struttura dati bitmap sottostante menzionato in this post. Per quanto ho ottenuto, PostgreSQL non supporta la creazione di indici bitmap.

Domanda: Così ogni volta che abbiamo bisogno di usare bitmap struttura di dati al fine di eseguire Bitmap Index Scan dobbiamo costruirla prima o PostgreSQL crea durante la costruzione di un indice btree e ricostruire in qualsiasi momento del tavolo è cambiato ?

risposta

21

La bitmap delle pagine viene creata dinamicamente per ogni query. Non viene memorizzato nella cache o riutilizzato e viene eliminato alla fine della scansione dell'indice bitmap.

Non ha senso creare anticipatamente la bitmap della pagina perché il suo contenuto dipende dai predicati della query.

Diciamo che stai cercando x=1 and y=2. Hai indici b-tree su x e . PostgreSQL non combina x e in una bitmap, quindi cerca la bitmap. Esegue la scansione di indice x per l'indirizzo della pagina di tutte le pagine con x=1 e fa una bitmap in cui le pagine che potrebbero contenere x=1 sono vere. Quindi esegue la scansione di cercando gli indirizzi di pagina in cui potrebbe corrispondere a 2, creando una bitmap da quella. Poi li usa per trovare pagine in cui sia x=1 sia y=2 potrebbero essere vere. Infine, si esegue la scansione del tavolo la sua auto, leggendo solo le pagine che potrebbero contenere valori candidati, la lettura di ogni pagina e mantenendo solo le righe in cui x=1 and y=2.

Ora, se si sta cercando qualcosa come un indice bitmap precompilato e memorizzato, esiste una cosa simile in PostgreSQL 9.5: BRIN indexes. Sono pensati per tabelle molto grandi e forniscono un modo per trovare gli intervalli della tabella che possono essere ignorati perché sono noti per non contenere un valore desiderato.

2

La bitmap delle pagine di dati viene creata dall'indice o più indici su richiesta (per query). Viene utilizzato quando l'indice restituisce più di meno righe o quando vengono utilizzati due o più indici sulla stessa relazione. Il contenuto della bitmap controlla quali pagine devono essere elaborate e quali pagine devono essere saltate.

Il requisito di base di questo metodo di scansione è l'indice esistente sulla tabella.

+0

Quindi, costruiamo la struttura _dal scratch_ qualsiasi momento abbiamo bisogno di fare 'Bitmap Heap Scan'? –

+0

no, questo è trasparente per l'utente. –