Nie wiem, czy Pg może łączyć indeks GiST i zwykłe indeksy b-drzewa ze skanowaniem indeksu bitmapy, ale podejrzewam, że nie. Możesz uzyskać najlepszy możliwy wynik bez dodawania user_id kolumnę do indeksu GiST (i w konsekwencji powiększając ją i zwalniając dla innych zapytań, które nie używają user_id ).
W ramach eksperymentu możesz:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
co prawdopodobnie spowoduje duży indeks, ale może wzmocnić to zapytanie - jeśli zadziała. Pamiętaj, że utrzymanie takiego indeksu znacznie spowolni INSERT i UPDATE s. Jeśli porzucisz stary ix_coords Twoje zapytania będą używać ix_coords_and_user_id nawet jeśli nie filtrują według user_id , ale będzie wolniejszy niż ix_coords . Zachowanie obu spowoduje, że INSERT i UPDATE spowolnienie jeszcze gorsze.
Zobacz btree-gist
(Przestarzałe przez edycję pytania, które całkowicie zmienia pytanie; po zapisaniu użytkownik miał indeks wielokolumnowy, został teraz podzielony na dwa oddzielne ):
Wygląda na to, że nie filtrujesz ani nie sortujesz według user_id , tylko create_date . Pg nie będzie (nie może?) używać tylko drugiego terminu indeksu wielokolumnowego, takiego jak (user_id, create_date) , wymaga również użycia pierwszego elementu.
Jeśli chcesz zindeksować create_date , utwórz dla niego osobny indeks. Jeśli używasz i potrzebujesz (user_id, create_date) indeksuj i zazwyczaj nie używaj tylko user_id sam, sprawdź, czy możesz odwrócić kolejność kolumn. Alternatywnie utwórz dwa niezależne indeksy, (user_id) i (create_date) . Gdy potrzebne są obie kolumny, Pg może połączyć dwa niezależne indeksy za pomocą skanowania indeksu bitmapy.