No sé si Pg puede combinar un índice GiST e índices b-tree regulares con un escaneo de índice de mapa de bits, pero sospecho que no. Es posible que obtenga el mejor resultado posible sin agregar un user_id
columna a su índice GiST (y, en consecuencia, hacerlo más grande y más lento para otras consultas que no usan user_id
).
Como experimento podrías:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
lo que probablemente resulte en un gran índice, pero podría impulsar esa consulta, si funciona. Tenga en cuenta que mantener dicho índice ralentizará significativamente INSERT
y UPDATE
s. Si sueltas el antiguo ix_coords
sus consultas utilizarán ix_coords_and_user_id
incluso si no filtran en user_id
, pero será más lento que ix_coords
. Mantener ambos hará que INSERT
y UPDATE
ralentización aún peor.
Ver btree-gist
(Obsoleto por la edición de la pregunta que cambia la pregunta por completo; cuando se escribió, el usuario tenía un índice de varias columnas, ahora se dividió en dos índices separados ):
Parece que no está filtrando ni ordenando en user_id
, solo create_date
. Pg no usará (¿no puede?) Solo el segundo término de un índice de varias columnas como (user_id, create_date)
, también necesita el uso del primer elemento.
Si desea indexar create_date
, cree un índice separado para él. Si usa y necesita el (user_id, create_date)
index y generalmente no usa solo user_id
solo, vea si puede invertir el orden de las columnas. Alternativamente, cree dos índices independientes, (user_id)
y (create_date)
. Cuando se necesitan ambas columnas, Pg puede combinar los dos índices independientes utilizando un escaneo de índice de mapa de bits.