Frage

Nach den Informationen, die ich finden konnte, lösen beide die gleichen Probleme – esoterischere Operationen wie Array-Eindämmung und Schnittmenge (&&, @>, <@ usw.).Ich wäre jedoch an Ratschlägen interessiert, wann ich das eine oder das andere (oder möglicherweise keines von beiden) verwenden sollte.
Der PostgreSQL-Dokumentation hat einige Informationen dazu:

  • 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 etwa zehnmal langsamer aktualisiert als GiST
  • GIN-Indizes sind zwei- bis dreimal größer als GiST

Es würde mich jedoch besonders interessieren, ob es Auswirkungen auf die Leistung gibt, wenn das Verhältnis von Speicher zu Indexgröße kleiner wird (d. h.die Indexgröße wird viel größer als der verfügbare Speicher)?Im IRC-Kanal #postgresql wurde mir gesagt, dass GIN den gesamten Index im Speicher behalten muss, sonst wäre es nicht effektiv, weil es im Gegensatz zu B-Tree nicht weiß, welchen Teil es von der Festplatte einlesen soll eine bestimmte Anfrage?Die Frage wäre:Stimmt das (weil mir auch das Gegenteil davon gesagt wurde)?Hat GiST die gleichen Einschränkungen?Gibt es weitere Einschränkungen, die ich bei der Verwendung eines dieser Indexierungsalgorithmen beachten sollte?

War es hilfreich?

Lösung

Müssen Sie sie zunächst für die Textsuchindizierung verwenden?GIN und GiST sind für einige Datentypen indexspezialisiert.Wenn Sie einfache Zeichen- oder Ganzzahlwerte indizieren müssen, ist der normale B-Tree-Index am besten geeignet.
Wie auch immer, die PostgreSQL-Dokumentation enthält ein Kapitel darüber KERN und eins weiter GIN, wo Sie weitere Informationen finden können.
Und zu guter Letzt: Der beste Weg, herauszufinden, welches das Beste ist, besteht darin, Beispieldaten zu generieren (so viele, wie Sie für ein reales Szenario benötigen) und dann einen GIST-Index zu erstellen und zu messen, wie viel Zeit zum Erstellen des Index benötigt wird. Fügen Sie einen neuen Wert ein und führen Sie eine Beispielabfrage aus.Dann löschen Sie den Index und machen Sie dasselbe mit einem GIN-Index.Vergleichen Sie die Werte und Sie erhalten auf Basis Ihrer Daten die Antwort, die Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top