Je ne sais pas si Pg peut combiner un index GiST et des index b-tree réguliers avec une analyse d'index bitmap, mais je suppose que non. Vous pouvez obtenir le meilleur résultat possible sans ajouter de user_id
colonne à votre index GiST (et par conséquent le rendant plus grand et plus lent pour les autres requêtes qui n'utilisent pas user_id
).
À titre expérimental, vous pourriez :
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
ce qui entraînera probablement un index volumineux, mais pourrait stimuler cette requête - si cela fonctionne. Soyez conscient que le maintien d'un tel index ralentira considérablement INSERT
et UPDATE
s. Si vous supprimez l'ancien ix_coords
vos requêtes utiliseront ix_coords_and_user_id
même s'ils ne filtrent pas sur user_id
, mais ce sera plus lent que ix_coords
. Garder les deux fera le INSERT
et UPDATE
ralentissement encore pire.
Voir btree-gist
(Obsolète par la modification d'une question qui change complètement la question ; lors de l'écriture, l'utilisateur avait un index multicolonne qu'il a maintenant divisé en deux index distincts ):
Vous ne semblez pas filtrer ou trier sur user_id
, uniquement create_date
. Pg n'utilisera pas (ne pourra pas ?) utiliser uniquement le deuxième terme d'un index multi-colonnes comme (user_id, create_date)
, il doit également utiliser le premier élément.
Si vous souhaitez indexer create_date
, créez un index distinct pour celui-ci. Si vous utilisez et avez besoin de (user_id, create_date)
index et n'utilisent généralement pas uniquement user_id
seul, voyez si vous pouvez inverser l'ordre des colonnes. Créez alternativement deux index indépendants, (user_id)
et (create_date)
. Lorsque les deux colonnes sont nécessaires, Pg peut combiner les deux index indépendants à l'aide d'un balayage d'index bitmap.