Von welchen Informationen konnte ich finden, sie beide lösen die gleichen Probleme - esoterische Operationen wie Array Eindämmung und Kreuzung (& &, @>, < @, etc). Allerdings wäre ich an Ratschlägen interessiert, wann ich das eine oder das andere (oder keines von beiden) verwenden sollte.
Die PostgreSQL documentation hat einige Informationen über diese:PostgreSQL: GIN oder GiST Indizes?
- GIN Index-Lookups sind etwa dreimal schneller als GiST
- GIN Indizes nehmen etwa drei Mal als GiST
- GIN Indizes zu bauen länger sind etwa zehnmal langsamer als GiST
- GIN Indizes zwei bis dreimal größer als würde GiST
aber ich i zu aktualisieren, insbesondere Es ist wichtig zu wissen, ob es einen Leistungseinfluss gibt, wenn das Speicher-Index-Größenverhältnis anfängt, klein zu werden (d. h. die Indexgröße wird viel größer als der verfügbare Speicher)? Mir wurde auf dem #postgresql-IRC-Kanal gesagt, dass GIN den gesamten Index im Speicher behalten muss, sonst wird es nicht effektiv sein, denn im Gegensatz zu B-Tree weiß es nicht, welcher Teil von der Platte eingelesen werden soll eine bestimmte Abfrage? Die Frage wäre: Ist das wahr (weil mir auch das Gegenteil gesagt wurde)? Hat GiST die gleichen Einschränkungen? Gibt es weitere Einschränkungen, auf die ich bei der Verwendung eines dieser Indexierungsalgorithmen achten sollte?
Diese Messungen variieren je nach verwendeter PG-Version. Ich habe gerade einen Test unter 9.6.1 gegen eine Hstore-Spalte ausgeführt und folgendes bekommen: GiST brauchte 4,1 mal länger als GIN und war für Lookups ungefähr 170 mal langsamer. Nicht einmal annähernd die Zahlen, die Sie zitiert haben. – IamIC