Ich weiß nicht, ob Pg einen GiST-Index und reguläre B-Tree-Indizes mit einem Bitmap-Index-Scan kombinieren kann, aber ich vermute nicht. Möglicherweise erhalten Sie das beste Ergebnis, ohne eine user_id
hinzuzufügen -Spalte in Ihren GiST-Index (und macht ihn folglich größer und langsamer für andere Abfragen, die user_id
nicht verwenden ).
Als Experiment könnten Sie:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
was wahrscheinlich zu einem großen Index führt, aber diese Abfrage ankurbeln könnte - wenn es funktioniert. Beachten Sie, dass die Pflege eines solchen Index INSERT
erheblich verlangsamt und UPDATE
s. Wenn Sie die alten ix_coords
löschen Ihre Abfragen verwenden ix_coords_and_user_id
auch wenn sie nicht nach user_id
filtern , aber es ist langsamer als ix_coords
. Wenn Sie beide beibehalten, wird INSERT
ausgeführt und UPDATE
Verlangsamung noch schlimmer.
Siehe btree-gist
(Veraltet durch Bearbeitung der Frage, die die Frage vollständig ändert; beim Schreiben hatte der Benutzer einen mehrspaltigen Index, den er jetzt in zwei separate unterteilt hat ):
Sie scheinen nicht nach user_id
zu filtern oder zu sortieren , nur create_date
. Pg wird (kann nicht?) nicht nur den zweiten Begriff eines mehrspaltigen Index wie (user_id, create_date)
verwenden , es muss auch das erste Element verwendet werden.
Wenn Sie create_date
indizieren möchten , erstellen Sie einen separaten Index dafür. Wenn Sie den (user_id, create_date)
verwenden und benötigen index und verwenden Sie im Allgemeinen nicht nur user_id
allein, sehen Sie, ob Sie die Spaltenreihenfolge umkehren können. Erstellen Sie alternativ zwei unabhängige Indizes, (user_id)
und (create_date)
. Wenn beide Spalten benötigt werden, kann Pg die beiden unabhängigen Indizes mit einem Bitmap-Index-Scan kombinieren.