sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammensat indeks med tre nøgler, hvad sker der, hvis jeg forespørger om at springe den midterste over?

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.



  1. PHP Postgres:Få sidste indsættelses-id

  2. Python 'int32' kan ikke konverteres til en MySQL-type

  3. Kan ikke forbinde MySQL-beholder til Tomcat-beholder i docker

  4. Hvordan nulstiller man postgres' primære nøglesekvens, når den falder ud af synkronisering?