PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Differenza tra indice GiST e GIN

Non credo di poterlo spiegare meglio di come fa già il manuale:

Nella scelta del tipo di indice da utilizzare, GiST o GIN, considera queste differenze di prestazioni:

  • Le ricerche nell'indice GIN sono circa tre volte più veloci di GiST

  • La creazione degli indici GIN richiede circa tre volte più tempo rispetto a GiST

  • Gli indici GIN sono moderatamente più lenti da aggiornare rispetto agli indici GiST, ma circa 10 volte più lenti se il supporto per l'aggiornamento rapido fosse disabilitato [...]

  • Gli indici GIN sono da due a tre volte più grandi degli indici GiST

Link e citazione si riferiscono al manuale di Postgres 9.4. Le stime di dimensioni e prestazioni sembravano già leggermente obsolete. Con Postgres 9.4 le quote sono cambiate sostanzialmente a favore di GIN .
Le note di rilascio di Postgres 9.4 includono:

  • Riduci la dimensione dell'indice GIN (Alexander Korotkov, Heikki Linnakangas) [...]

  • Migliora la velocità delle ricerche GIN multi-chiave (Alexander Korotkov, HeikkiLinnakangas)

Da allora le stime di dimensioni e prestazioni sono state rimosse dal manuale.

Tieni presente che esistono casi d'uso speciali che richiedono l'uno o l'altro.

Una cosa che hai frainteso:tu mai ottenere risultati errati con un indice GiST. L'indice opera su valori hash, che possono portare a falsi positivi nell'indice. Questo dovrebbe diventare rilevante solo con un numero molto grande di parole diverse nei tuoi documenti. I falsi positivi vengono comunque eliminati dopo aver ricontrollato la riga effettiva. Il manuale:

Un indice GiST è con perdita, il che significa che l'indice può produrre false corrispondenze ed è necessario controllare la riga effettiva della tabella per eliminare tali false corrispondenze. (PostgreSQL lo fa automaticamente quando necessario. )

Enfasi in grassetto la mia.