PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Zusammengesetzter PostgreSQL-Primärschlüssel

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?