Em 28/06/2011 13:36, Fábio Telles Rodriguez escreveu:
>     Índices devem primar pela "seletividade", portanto campos com maior
>     variação
>     devem figurar primeiro na lista de campos do índice para que cada
>     filtro traga o menor número possível de registros, favorecendo assim a
>     utilidade e o uso do índice.
>
> Ok, aceito a crítica. Mas você tem algum link que indica isso?

        Pesquisando no google por: "index column order matter" você encontra 
centenas. Desde a própria wikipedia até inúmeros posts em vários blogs e 
várias respostas da lista postgresql-performance.

        Eu sempre trabalhei pensando exatamente o contrário do que você pôs em 
seu post no blog e consoante ao que o Hasse comentou, acreditando 
unicamente nos meus testes.

        Tenho uma tabela como você citou em seu texto. que relaciona entregas e 
listas. Eu tenho cerca de 35 milhões de entregas, e cerca de 3 milhões 
de listas e uma relação N para N entre as duas.

        Eu crio dois índices compostos nesta tabela com os campos 
[codentrega,codlista], respectivas chaves primárias das tabelas entregas 
e listas, um com o campo codentrega primeiro e outro índice com o campo 
codlista primeiro.

        Uma consulta do tipo "explain select * from listas_detalhe where 
codlista = 1165774 and codentrega = 9010356583" vai informar que está 
sendo usado sempre o índice onde o primeiro campo tem a maior 
seletividade, no caso o campo codentrega. Se seu pensamento estiver 
certo, o postgresql está escolhendo o pior índice?

        Abraço,

--
Shander Lyrio
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a