Wenn Sie einen zusammengesetzten Primärschlüssel erstellen, auf (x, y, z)
, PostgreSQL implementiert dies mit Hilfe eines UNIQUE
mehrspaltiger Btree-Index auf (x, y, z)
. Außerdem sind alle drei Spalten NOT NULL
(implizit), was der Hauptunterschied zwischen einem PRIMARY KEY
ist und einen UNIQUE INDEX
.
Abgesehen von offensichtlichen Einschränkungen für Ihre Daten hat der mehrspaltige Index auch eine etwas andere Auswirkung auf die Leistung von Abfragen als drei einzelne Indizes auf x
, y
und z
.
Verwandte Diskussion auf dba.SE:
- Arbeiten von Indizes in PostgreSQL
Mit Beispielen, Benchmarks, Diskussion und Ausblick auf die neue Funktion Nur-Index-Scans in Postgres 9.2.
Insbesondere ein Primärschlüssel auf (x, y, z)
beschleunigt Abfragen mit Bedingungen auf x
, (x,y)
oder (x,y,z)
optimal. Es hilft auch bei Abfragen zu y
, z
, (y,z)
oder (x,z)
aber in weit geringerem Umfang.
Wenn Sie Abfragen für die letztgenannten Kombinationen beschleunigen müssen, möchten Sie möglicherweise die Reihenfolge der Spalten in Ihrer PK-Einschränkung ändern und/oder einen oder mehrere zusätzliche Indizes erstellen. Siehe:
- Ist ein zusammengesetzter Index auch gut für Abfragen im ersten Feld?