Müssen Postgres GIN-Indizes regelmäßig neu erstellt werden?

7

Werden sie aufgebläht wie Btree-Indizes? Wenn ja, wie kann das Aufblähen z. B. durch ein automatisiertes Neuindizierungsskript gemessen werden? Ich bin daran interessiert, die Abfrageleistung zu verbessern und Platz zu sparen.

David Tinker
quelle

Antworten:

3

Empirisch habe ich festgestellt, dass GIN-Indizes neu indiziert werden müssen, nachdem ich eine große Anzahl von Zeilen in die Tabelle eingefügt habe.

Ich hatte eine Tabelle mit 15 Millionen Zeilen mit einem GIN-Index, mit dem ich in weniger als 3 Sekunden eine Stichwortsuche durchführen konnte. Nachdem ich eine weitere Million Zeilen eingefügt hatte, dauerte dieselbe Suche 30 Sekunden. Ich habe einen Tag nach meinen Einfügungen gewartet, aber die Suche war immer noch langsam, also habe ich REINDEXmeinen GIN-Index manuell ausgeführt , was etwas mehr als eine Stunde dauerte, aber danach war meine Suche wieder bei 3 Sekunden.

Cerin
quelle
2

GIN-Indizes werden mit B-Bäumen erstellt, jedoch mit einer anderen Struktur.

"Das Potenzial für Aufblähungen in Nicht-B-Baum-Indizes wurde nicht gut untersucht. Es ist eine gute Idee, die physische Größe des Index regelmäßig zu überwachen, wenn ein Nicht-B-Baum-Indextyp verwendet wird."

Weitere Informationen finden Sie unter : Routine-Neuindizierung

Mladen Uzelac
quelle
1
Meinten Sie "sind nicht gebaut"?
Ypercubeᵀᴹ
0

Nun, es hängt ein bisschen vom Anwendungsfall ab. Die Wiederverwendung von Elementzeigern in GIN ist definitiv viel schwieriger als in einem Btree, da die Struktur auf der Ebene der Elementzeiger völlig anders ist. Mit der neuen GIN-Struktur ist das Leben noch schwieriger vorherzusagen, daher würde ich es genau beobachten - abhängig von Ihrer Art, GIN zu verwenden, ist REINDEXmöglicherweise eine erforderlich. Aber wie bereits erwähnt - harte Beweise sind hier schwer zu finden.

Hans-Jürgen Schönig
quelle