Sobes.tech
Middle

Quali sono i tipi di indici in PostgreSQL?

sobes.tech AI

Risposta dell'AI

Esistono i seguenti principali tipi di indici:

  1. B-tree (Albero B) - il tipo più comune, adatto alla maggior parte delle query tipiche (uguaglianza, confronto, intervallo). Basato su un albero bilanciato.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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 timestamp nelle 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.