sql >> Database >  >> RDS >> PostgreSQL

Verschil tussen GiST en GIN-index

Ik denk niet dat ik het beter zou kunnen uitleggen dan de handleiding al doet:

Houd bij het kiezen van het te gebruiken indextype, GiST of GIN, rekening met deze prestatieverschillen:

  • GIN index lookups zijn ongeveer drie keer sneller dan GiST

  • GIN-indexen hebben ongeveer drie keer meer tijd nodig om te bouwen dan GiST

  • GIN-indexen zijn matig langzamer te updaten dan GiST-indexen, maar ongeveer 10 keer langzamer als ondersteuning voor snelle updates was uitgeschakeld [...]

  • GIN-indexen zijn twee tot drie keer groter dan GiST-indexen

Link en quote verwijzen naar de handleiding voor Postgres 9.4. Schattingen van omvang en prestaties leken al enigszins achterhaald. Met Postgres 9.4 zijn de kansen aanzienlijk verschoven in het voordeel van GIN .
De release-opmerkingen van Postgres 9.4 omvatten:

  • Verklein de GIN-index (Alexander Korotkov, Heikki Linnakangas) [...]

  • Verbeter de snelheid van multi-key GIN-zoekopdrachten (Alexander Korotkov, HeikkiLinnakangas)

Schattingen van grootte en prestaties zijn sindsdien uit de handleiding verwijderd.

Houd er rekening mee dat er speciale gevallen zijn die het een of het ander vereisen.

Eén ding heb je verkeerd begrepen:je nooit krijg verkeerde resultaten met een GiST-index. De index werkt op hash-waarden, die kunnen leiden tot valse positieven in de index. Dit zou pas relevant moeten worden met een zeer groot aantal verschillende woorden in uw documenten. Valse positieven worden in ieder geval geëlimineerd na het opnieuw controleren van de eigenlijke rij. De handleiding:

Een GiST-index is lossy, wat betekent dat de index valse overeenkomsten kan produceren, en het is noodzakelijk om de daadwerkelijke tabelrij te controleren om dergelijke valse overeenkomsten te elimineren. (PostgreSQL doet dit automatisch wanneer nodig. )

Vetgedrukte nadruk van mij.




  1. SQLite Node.js

  2. Jaren toevoegen aan een datum in PostgreSQL

  3. Meer SQL, minder code, met PostgreSQL

  4. CASE versus DECODE