Domanda

Dalle informazioni che ho potuto trovare, entrambi risolvono gli stessi problemi: operazioni più esoteriche come il contenimento e l'intersezione degli array (&&, @>, <@, ecc.).Tuttavia sarei interessato a consigli su quando utilizzare l'uno o l'altro (o eventualmente nessuno dei due).
IL Documentazione PostgreSQL ha alcune informazioni a riguardo:

  • Le ricerche dell'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 circa dieci volte più lenti da aggiornare rispetto a GiST
  • Gli indici GIN sono da due a tre volte più grandi di GiST

Tuttavia, sarei particolarmente interessato a sapere se vi è un impatto sulle prestazioni quando il rapporto tra memoria e dimensione dell'indice inizia a ridursi (ad es.la dimensione dell'indice diventa molto più grande della memoria disponibile)?Mi è stato detto sul canale IRC #postgresql che GIN deve mantenere tutto l'indice in memoria, altrimenti non sarà efficace, perché, a differenza di B-Tree, non sa quale parte leggere dal disco una domanda particolare?La domanda sarebbe:è vero (perché mi è stato detto anche il contrario)?GiST ha le stesse restrizioni?Ci sono altre restrizioni di cui dovrei essere consapevole durante l'utilizzo di uno di questi algoritmi di indicizzazione?

È stato utile?

Soluzione

Innanzitutto è necessario utilizzarli per l'indicizzazione della ricerca testuale?GIN e GiST sono indici specializzati per alcuni tipi di dati.Se è necessario indicizzare semplici valori di caratteri o interi, il normale indice B-Tree è il migliore.
Ad ogni modo, la documentazione di PostgreSQL ha un capitolo su GIST e uno su GIN, dove puoi trovare maggiori informazioni.
E, ultimo ma non meno importante, il modo migliore per trovare quale sia il migliore è generare dati campione (quanto necessario per essere uno scenario reale) e quindi creare un indice GIST, misurando quanto tempo è necessario per creare l'indice, inserire un nuovo valore, eseguire una query di esempio.Quindi rilascia l'indice e fai lo stesso con un indice GIN.Confronta i valori e avrai la risposta che cerchi, in base ai tuoi dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top