Quali sono i tipi di indici in PostgreSQL?
sobes.tech AI
Risposta dell'AI
Esistono i seguenti principali tipi di indici:
-
B-tree (Albero B) - il tipo più comune, adatto alla maggior parte delle query tipiche (uguaglianza, confronto, intervallo). Basato su un albero bilanciato.
-
Hash (Hash) - usato per verificare l’uguaglianza (=). Più veloce del B-tree per queste query, ma non supporta confronti e intervalli. Memorizza il valore hash della chiave e un puntatore alla riga.
-
GiST (Generalized Search Tree) - struttura di albero di ricerca generalizzata che permette di costruire diversi indici per tipi di dati complessi (geometrici, testuali con ricerca a testo completo). Basato su un albero bilanciato.
-
SP-GiST (Space-Partitioned Generalized Search Tree) - versione specializzata di GiST per dati che possono essere divisi per spazio (ad esempio, punti, rettangoli). Esempi: alberi k-d, quadtrees.
-
GIN (Generalized Inverted Index) - indice invertito generalizzato, principalmente per cercare elementi all’interno di valori compositi (ad esempio, array, JSONB). Spesso usato per la ricerca a testo completo.
-
BRIN (Block Range INdex) - indice di intervallo di blocco. Adatto per tabelle molto grandi con dati ordinati naturalmente (ad esempio, per tempo). Indizza l’intervallo di valori nei blocchi fisici del disco.
-
Bloom (Filtro di Bloom) - non è un indice tradizionale, ma una struttura di dati probabilistica per verificare rapidamente l’assenza di un elemento. Usato per accelerare le query su tabelle molto grandi quando non è richiesta una corrispondenza esatta o come filtro aggiuntivo prima di scansionare l’indice principale.
Esempi di utilizzo:
- B-tree: indice su campi numerici, date, stringhe per ricerca per intervallo (
WHERE amount > 100). - Hash: raramente usato direttamente, poiché il B-tree è generalmente più veloce per la maggior parte dei compiti.
- GiST: indici geospaziali (
gist(location)), indici per la ricerca a testo completo (to_tsvector). - SP-GiST: indici per dati bidimensionali (
spgist(point)). - GIN: indici per array (
gin(tags)), JSONB (gin(data)), ricerca a testo completo. - BRIN: indice sul campo
timestampnelle tabelle di log, dove i dati sono ordinati per tempo. - Bloom: indice su un insieme di colonne (
bloom(col1, col2, col3)) per scartare rapidamente le righe in cui la combinazione di valori non è presente.
La scelta del tipo di indice dipende dal tipo di dati della colonna e dal tipo di query che si desidera ottimizzare.