Postgres kan använda icke-ledande kolumner i ett b-trädindex, men i ett mycket mindre effektivt läge.
Om den första kolumnen är mycket selektiv (endast få rader per A
) så kommer du knappast att märka någon skillnad i prestanda eftersom båda åtkomstmetoderna (även en sekventiell skanning över den reducerade uppsättningen) är billiga. Prestandaträffen växer med antalet rader per A
.
För det fall du beskriver föreslår jag att du skapar indexet på (A, C, B)
eller (C, A, B)
(se bara till att B
kommer sist) för att optimera prestandan. På så sätt får du bästa prestanda för frågor på (A, B, C)
och på (A, C)
likadana.
Till skillnad från sekvensen av kolumner i indexet spelar sekvensen av predikat i frågan ingen roll.
Vi har diskuterat detta mycket ingående på dba.SE:
Observera att det inte gör det oavsett om du leder med A, C
eller C, A
för det aktuella fallet:
Det finns också några andra överväganden, men din fråga innehåller inte alla relevanta detaljer.