Postgres kann nicht führende Spalten in einem B-Tree-Index verwenden, aber in einem weitaus weniger effizienten Modus.
Wenn die erste Spalte sehr selektiv ist (nur wenige Zeilen pro A
) werden Sie kaum einen Unterschied in der Leistung bemerken, da beide Zugriffsmethoden (sogar ein sequenzieller Scan über den reduzierten Satz) billig sind. Der Performance-Hit wächst mit der Anzahl der Zeilen pro A
.
Für den von Ihnen beschriebenen Fall schlage ich vor, den Index auf (A, C, B)
zu erstellen oder (C, A, B)
(stellen Sie einfach sicher, dass B
kommt zuletzt), um die Leistung zu optimieren. Auf diese Weise erhalten Sie die beste Leistung für Abfragen auf (A, B, C)
und auf (A, C)
gleich.
Anders als die Reihenfolge der Spalten im Index spielt die Reihenfolge der Prädikate in der Abfrage keine Rolle.
Wir haben dies ausführlich auf dba.SE besprochen:
Beachten Sie, dass dies nicht der Fall ist egal, ob Sie mit A, C
führen oder C, A
für den vorliegenden Fall:
Es gibt auch einige andere Überlegungen, aber Ihre Frage enthält nicht alle relevanten Details.