Eu tenho uma tabela com um índice de várias colunas e tenho dúvidas sobre a classificação adequada dos índices para obter o desempenho máximo 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 estão distribuídos igualmente, portanto, temos cerca de 10000 linhas para cada valor possível.
A coluna c2 pode ter 1000 valores diferentes . Temos 1000 linhas para todos os valores possíveis.
Ao pesquisar dados, a condição sempre inclui valores para essas duas colunas; portanto, a tabela possui 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.
Minha pergunta é esta:
Dado o fato de um dos filtros selecionar um conjunto de dados muito menor, eu poderia melhorar o desempenho se o primeiro índice for o mais seletivo (aquele que permite um conjunto menor)? Eu nunca tinha considerado essa pergunta até ver os gráficos do artigo mencionado:
Imagem retirada do artigo referenciado sobre índices de várias colunas .
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%"