Eu tenho lido sobre composite indexes
e estou um pouco confuso sobre o pedido. Esta documentação (pouco menos da metade) diz
Em geral, você deve colocar a coluna que deve ser usada com mais frequência primeiro no índice.
No entanto, pouco depois diz
crie um índice composto colocando a coluna mais seletiva primeiro; ou seja, a coluna com mais valores.
A Oracle também diz isso aqui em outras palavras
Se todas as chaves forem usadas nas cláusulas WHERE com a mesma frequência, a ordem dessas chaves da mais seletiva para a menos seletiva na instrução CREATE INDEX melhora melhor o desempenho da consulta.
No entanto, encontrei uma resposta SO que diz de forma diferente. Diz
Organize as colunas com a coluna menos seletiva primeiro e a coluna mais seletiva por último. No caso de empate leve com a coluna que tem mais chances de ser usada sozinha.
A primeira documentação que mencionei diz que você deve primeiro usar o mais usado, enquanto a resposta do SO diz que deve ser apenas para desempate. Então eles também diferem na ordem.
Esta documentação também fala skip scanning
e diz
A varredura de salto é vantajosa se houver poucos valores distintos na coluna inicial do índice composto e muitos valores distintos na chave não inicial do índice.
Outro artigo diz
A coluna de prefixo deve ser a mais discriminativa e a mais amplamente usada em consultas
o que eu acredito que mais discriminador significaria mais distinto.
Toda essa pesquisa ainda me leva à mesma pergunta; A coluna mais seletiva deve ser a primeira ou a última? A primeira coluna deve ser a mais usada e apenas a mais seletiva em um tie-break?
Esses artigos parecem se contradizer, mas oferecem alguns exemplos. Pelo que reuni, parece ser mais eficiente least selective column
ser o primeiro na ordenação se você estiver antecipando Index Skip Scans
. Mas não tenho muita certeza se isso está correto.