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.