Tenho uma tabela com índice multicolunas, e tenho dúvidas sobre a ordenação adequada dos índices para obter o máximo desempenho nas consultas.
O cenário:
PostgreSQL 8.4, tabela com cerca de um milhão de linhas
Os valores na coluna c1 podem ter cerca de 100 valores diferentes . Podemos assumir que os valores são distribuídos uniformemente, então temos cerca de 10.000 linhas para cada valor possível.
A coluna c2 pode ter 1.000 valores diferentes . Temos 1000 linhas para cada valor possível.
Ao pesquisar dados, a condição sempre inclui valores para essas duas colunas, portanto, a tabela tem um índice de várias colunas combinando c1 e c2. Eu li sobre a importância de ordenar corretamente as colunas em um índice de várias colunas se você tiver consultas usando apenas uma coluna para filtragem. Este não é o caso em nosso cenário.
A minha pergunta é esta:
Dado que um dos filtros seleciona um conjunto de dados muito menor, posso melhorar o desempenho se o primeiro índice for o mais seletivo (o que permite um conjunto menor)? Eu nunca havia considerado essa questão até ver os gráficos do artigo referenciado:
Imagem retirada do artigo referenciado sobre índices multicolunas .
As consultas usam valores das duas colunas para filtragem. Não tenho consultas usando apenas uma coluna para filtragem. Todos eles são: WHERE c1=@ParameterA AND c2=@ParameterB
. Também existem condições como esta:WHERE c1 = "abc" AND c2 LIKE "ab%"