Postgres kan bruge ikke-ledende kolonner i et b-træindeks, men i en langt mindre effektiv tilstand.
Hvis den første kolonne er meget selektiv (kun få rækker pr. A
). ) så vil du næppe bemærke en forskel i ydeevne, da begge adgangsmetoder (selv en sekventiel scanning over det reducerede sæt) er billige. Ydeevnehittet vokser med antallet af rækker pr. A
.
For det tilfælde, du beskriver, foreslår jeg at oprette indekset på (A, C, B)
eller (C, A, B)
(bare sørg for, at B
kommer sidst) for at optimere ydeevnen. På denne måde får du den bedste ydeevne for forespørgsler på (A, B, C)
og på (A, C)
ens.
I modsætning til rækkefølgen af kolonner i indekset, er rækkefølgen af prædikater i forespørgslen ligegyldig.
Vi har diskuteret dette meget detaljeret på dba.SE:
Bemærk, at det ikke gør uanset om du leder med A, C
eller C, A
for den foreliggende sag:
Der er også nogle andre overvejelser, men dit spørgsmål indeholder ikke alle de relevante detaljer.