PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Unterschied zwischen GiST- und GIN-Index

Ich glaube nicht, dass ich es besser erklären könnte, als es das Handbuch bereits tut:

Berücksichtigen Sie bei der Auswahl des zu verwendenden Indextyps, GiST oder GIN, diese Leistungsunterschiede:

  • GIN-Indexsuchen sind etwa dreimal schneller als GiST

  • Die Erstellung von GIN-Indizes dauert etwa dreimal länger als die von GiST

  • GIN-Indizes werden etwas langsamer aktualisiert als GiST-Indizes, aber etwa 10-mal langsamer, wenn die Unterstützung für schnelle Updates deaktiviert wurde [...]

  • GIN-Indizes sind zwei- bis dreimal größer als GiST-Indizes

Link und Zitat verweisen auf das Handbuch für Postgres 9.4. Größen- und Leistungsschätzungen schienen bereits etwas veraltet zu sein. Mit Postgres 9.4 haben sich die Chancen deutlich zu Gunsten von GIN verschoben .
Die Versionshinweise von Postgres 9.4 beinhalten:

  • Größe des GIN-Index reduzieren (Alexander Korotkov, Heikki Linnakangas) [...]

  • Verbessern Sie die Geschwindigkeit von Multi-Key-GIN-Lookups (Alexander Korotkov, HeikkiLinnakangas)

Größen- und Leistungsschätzungen wurden inzwischen aus dem Handbuch entfernt.

Beachten Sie, dass es spezielle Anwendungsfälle gibt, die das eine oder andere erfordern.

Eines hast du falsch verstanden:Du nie mit einem GiST-Index falsche Ergebnisse erhalten. Der Index arbeitet mit Hash-Werten, was kann zu Fehlalarmen im Index führen. Dies sollte erst bei einer sehr großen Anzahl unterschiedlicher Wörter in Ihren Dokumenten relevant werden. Falsch positive Ergebnisse werden in jedem Fall nach erneuter Überprüfung der tatsächlichen Zeile eliminiert. Das Handbuch:

Ein GiST-Index ist verlustbehaftet, was bedeutet, dass der Index falsche Übereinstimmungen erzeugen kann und es notwendig ist, die tatsächliche Tabellenzeile zu überprüfen, um solche falschen Übereinstimmungen zu eliminieren. (PostgreSQL erledigt dies bei Bedarf automatisch. )

Fettdruck von mir.