Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Indici > Tipi di indice
PrecedenteIndiciIndici multicolonnaSuccessivo

11.2. Tipi di indice

PostgreSQL™ fornisce diversi tipi di indici: B-tree, Hash, gist and gin. Ogni tipo di indice utilizza differenti algoritmi che si adattano ai diversi tipi di query. Per impostazione predefinita, il comando CREATE INDEX crea un indice B-tree, che è adatto alle situazioni più comuni.

I B-tree possono gestire query di uguaglianza e di intervallo sui dati che possono essere ordinati qualsiasi modo. In particolare, il planner delle query di PostgreSQL™ considera la possibilità di usare un indice B-tree quando una colonna indicizzata è coinvolta in un confronto utilizzando uno di questi operatori:

<
<=
=
>=
>

Strutture equivalenti a combinazioni di questi operatori, quali BETWEEN e IN, possono anche essere implementate con un indice di ricerca B-tree. Anche una condizione IS NULL su una colonna indicizzata può essere usata con un indice B-tree.

L'ottimizzatore può anche usare un indice B-tree per query che coinvologono gli operatori di corrispondenza di modello LIKE e ~ se il modello è una costante ed è ancorato all'inizio della stringa -- per esempio, col LIKE 'foo%' o col ~ '^foo', ma non col LIKE '%bar'. Tuttavia, se il proprio server non usa il C locale bisognerà creare l'indice con una speciale classe di operatore per supportare l'indicizzazione delle query di corrispondenza-modelli. Consultare Sezione 11.9, «Classi operatore e famiglie di operatori» sotto. È anche possibile usare gli indici B-tree per ILIKE and ~*, ma solo se il modello inizia con caratteri non-alfabetici, cioè caratteri che non sono interessati dalla conversione maisucolo/minuscolo.

Gli indici hash possono gestire solo semplici confronti di uguaglianza. Il planner delle query considererà l'utilizzo di un indice hash quando una colonna indicizzata viene coinvolta in un confronto che utilizza l'operatore =. (Ma gli indici hash non supportano ricerche IS NULL). Il seguente comando viene utilizzato per creare un indice hash:

CREATE INDEX name ON table USING hash (column);

[Nota]

Nota

Le operazioni sugli indici hash non sono attualmente registrate da WAL, per cui gli indici hash potrebbero aver bisogno di essere ricostruiti con REINDEX dopo un crash del database. Per questi motivi, l'uso degli indici hash è attualmente sconsigliato.

Gli indici gist non sono un singolo tipo di indice, ma piuttosto una infrastruttura nella quale diverse strategie di indicizzazione possono essere implementate. Di conseguenza, i particolari operatori con i quali l'indice gist può essere usato variano secondo la strategia di indicizzazione (la classe operatore). Come esempio, la distribuzione standard di PostgreSQL™ include la classe operatore gist per diversi tipi di dati geometrici bidimensionali, essa supporta le query indicizzate che utilizzano questi operatori:

<<
&<
&>
>>
<<|
&<|
|&>
|>>
@>
<@
~=
&&

(Consultare Sezione 9.11, «Funzioni e operatori geometrici» per il significato di questi operatori). Diverse altre classi di operatori gist sono disponibili nel gruppo contrib o come progetti separati. Per ulteriori informazioni consultare il Capitolo 52, gist Indexes.

Gli indici gin sono indici invertiti che possono gestire valori che contengono più di una chiave, per esempio gli array. Come per gist, gin può supportare molte differenti strategie di indicizzazione definite dall'utente, ed i particolari operatori con i quali un indice gin può essere usato, variano in dipendenza della strategia di indicizzazione. Come esempio, la distribuzione standard di PostgreSQL™ include classi di operatore gin per array mono-dimensionali, le quali supportano query indicizzate che utilizzano questi operatori:

<@
@>
=
&&

(Consultare Sezione 9.17, «Funzioni ed operatori per array» per trovare il significato di questi operatori). Diverse altre classi di operatori gin sono disponibili nel gruppo contrib o come progetti separati. Per ulteriori informazioni consultare il Capitolo 53, gin Indexes.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Indici > Tipi di indice
PrecedenteIndiciIndici multicolonnaSuccessivo