PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Índice composto com três chaves, o que acontece se eu consultar pulando a do meio?


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.