Non so se Pg possa combinare un indice GiST e indici b-tree regolari con una scansione dell'indice bitmap, ma sospetto di no. Potresti ottenere il miglior risultato possibile senza aggiungere un user_id
colonna al tuo indice GiST (e di conseguenza rendendolo più grande e più lento per altre query che non utilizzano user_id
).
Come esperimento potresti:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
che è probabile che si traduca in un grande indice, ma potrebbe aumentare quella query, se funziona. Tieni presente che il mantenimento di un tale indice rallenterà notevolmente INSERT
e UPDATE
S. Se elimini il vecchio ix_coords
le tue query utilizzeranno ix_coords_and_user_id
anche se non filtrano su user_id
, ma sarà più lento di ix_coords
. Mantenendo entrambi verrà visualizzato il INSERT
e UPDATE
rallentamento ancora peggio.
Vedi btree-gist
(Obsoleto dalla modifica alla domanda che cambia completamente la domanda; quando l'utente aveva scritto un indice multicolonna, ora è stato diviso in due separati ):
Sembra che tu non stia filtrando o ordinando su user_id
, solo create_date
. Pg non utilizzerà (non può?) utilizzare solo il secondo termine di un indice a più colonne come (user_id, create_date)
, è necessario utilizzare anche il primo elemento.
Se vuoi indicizzare create_date
, crea un indice separato per esso. Se usi e hai bisogno del (user_id, create_date)
index e generalmente non utilizzare solo user_id
da solo, vedi se riesci a invertire l'ordine delle colonne. In alternativa, crea due indici indipendenti, (user_id)
e (create_date)
. Quando sono necessarie entrambe le colonne, Pg può combinare i due indici indipendenti utilizzando una scansione dell'indice bitmap.