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.