PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres combinando vários índices


Não sei se o Pg pode combinar um índice GiST e índices regulares de b-tree com uma varredura de índice de bitmap, mas suspeito que não. Você pode obter o melhor resultado possível sem adicionar um user_id coluna ao seu índice GiST (e, consequentemente, tornando-o maior e mais lento para outras consultas que não usam user_id ).

Como experimento, você pode:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);

o que provavelmente resultará em um grande índice, mas pode aumentar essa consulta - se funcionar. Esteja ciente de que manter esse índice diminuirá significativamente o INSERT e UPDATE s. Se você descartar o antigo ix_coords suas consultas usarão ix_coords_and_user_id mesmo que não filtrem em user_id , mas será mais lento que ix_coords . Manter ambos fará com que o INSERT e UPDATE desaceleração ainda pior.

Consulte btree-gist

(Desatualizado por editar a pergunta que altera a pergunta completamente; quando escrito, o usuário tinha um índice de várias colunas, agora dividido em dois separados ):

Você não parece estar filtrando ou classificando em user_id , apenas create_date . Pg não usará (não pode?) usar apenas o segundo termo de um índice de várias colunas como (user_id, create_date) , ele também precisa do primeiro item.

Se você deseja indexar create_date , crie um índice separado para ele. Se você usa e precisa do (user_id, create_date) index e geralmente não use apenas user_id sozinho, veja se consegue inverter a ordem das colunas. Como alternativa, crie dois índices independentes, (user_id) e (create_date) . Quando ambas as colunas são necessárias, o Pg pode combinar os dois índices independentes usando uma varredura de índice de bitmap.