Jeg ved ikke, om Pg kan kombinere et GiST-indeks og almindelige b-træ-indekser med en bitmap-indeksscanning, men jeg formoder ikke. Du får muligvis det bedste resultat, du kan, uden at tilføje et user_id kolonne til dit GiST-indeks (og dermed gøre det større og langsommere for andre forespørgsler, der ikke bruger user_id ).
Som et eksperiment kunne du:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
hvilket sandsynligvis vil resultere i et stort indeks, men måske øger denne forespørgsel - hvis det virker. Vær opmærksom på, at vedligeholdelse af et sådant indeks vil sænke INSERT betydeligt og UPDATE s. Hvis du dropper den gamle ix_coords dine forespørgsler vil bruge ix_coords_and_user_id selvom de ikke filtrerer på user_id , men det vil være langsommere end ix_coords . Hvis du beholder begge, bliver INSERT og UPDATE afmatning endnu værre.
Se btree-gist
(Forældet ved redigering af spørgsmål, der ændrer spørgsmålet fuldstændigt; når det blev skrevet, havde brugeren et indeks med flere kolonner, de er nu opdelt i to separate ):
Du ser ikke ud til at filtrere eller sortere på user_id , kun create_date . Pg vil (kan ikke?) kun bruge det andet led i et indeks med flere kolonner som (user_id, create_date) , den skal også bruge det første element.
Hvis du vil indeksere create_date , opret et separat indeks for det. Hvis du bruger og har brug for (user_id, create_date) indeks og brug generelt ikke kun user_id alene, se om du kan vende kolonnerækkefølgen. Opret alternativt to uafhængige indekser, (user_id) og (create_date) . Når begge kolonner er nødvendige, kan Pg kombinere de to uafhængige indekser ved hjælp af en bitmap-indeksscanning.