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.