O Postgres pode usar colunas não à esquerda em um índice b-tree, mas em um modo muito menos eficiente.
Se a primeira coluna for muito seletiva (apenas algumas linhas por
A
), dificilmente você notará uma diferença no desempenho, pois qualquer método de acesso (mesmo uma varredura sequencial sobre o conjunto reduzido) é barato. O sucesso de desempenho aumenta com o número de linhas por A
. Para o caso que você descreve, sugiro criar o índice em
(A, C, B)
ou (C, A, B)
(apenas certifique-se de que B
vem por último) para otimizar o desempenho. Dessa forma, você obtém o melhor desempenho para consultas em (A, B, C)
e em (A, C)
parecido. Ao contrário da sequência de colunas no índice, a sequência de predicados na consulta não importa.
Discutimos isso detalhadamente no dba.SE:
Observe que não importa se você lidera com
A, C
ou C, A
para o caso em questão:Há também algumas outras considerações, mas sua pergunta não contém todos os detalhes relevantes.