Postgres może używać kolumn niebędących wiodącymi w indeksie b-drzewa, ale w znacznie mniej wydajnym trybie.
Jeśli pierwsza kolumna jest bardzo selektywna (tylko kilka wierszy na A
), wtedy prawie nie zauważysz różnicy w wydajności, ponieważ obie metody dostępu (nawet sekwencyjne skanowanie ograniczonego zestawu) są tanie. Trafienie wydajności rośnie wraz z liczbą wierszy przypadających na A
.
W przypadku, który opisujesz, sugeruję utworzenie indeksu na (A, C, B)
lub (C, A, B)
(tylko upewnij się, że B
jest ostatni), aby zoptymalizować wydajność. W ten sposób uzyskasz najlepszą wydajność dla zapytań na (A, B, C)
i na (A, C)
podobne.
W przeciwieństwie do sekwencji kolumn w indeksie, kolejność predykatów w zapytaniu nie ma znaczenia.
Szczegółowo omówiliśmy to na dba.SE:
Pamiętaj, że nie ma znaczenie, czy prowadzisz z A, C
lub C, A
dla rozpatrywanej sprawy:
Jest jeszcze kilka innych kwestii, ale Twoje pytanie nie zawiera wszystkich istotnych szczegółów.