Postgres può utilizzare colonne non iniziali in un indice b-tree, ma in una modalità molto meno efficiente.
Se la prima colonna è molto selettiva (solo poche righe per A ) allora difficilmente noterai una differenza di prestazioni poiché entrambi i metodi di accesso (anche una scansione sequenziale sul set ridotto) sono economici. L'aumento delle prestazioni aumenta con il numero di righe per A .
Per il caso che descrivi ti consiglio di creare l'indice su (A, C, B) o (C, A, B) (assicurati solo che B viene per ultimo) per ottimizzare le prestazioni. In questo modo ottieni le migliori prestazioni per le query su (A, B, C) e su (A, C) allo stesso modo.
A differenza della sequenza di colonne nell'indice, la sequenza di predicati nella query non ha importanza.
Ne abbiamo discusso in dettaglio su dba.SE:
Tieni presente che non importa se guidi con A, C o C, A per il caso in questione:
Ci sono anche altre considerazioni, ma la tua domanda non ha tutti i dettagli rilevanti.