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.