Hvis du opretter en sammensat primærnøgle, på (x, y, z) , PostgreSQL implementerer dette ved hjælp af én UNIQUE multi-kolonne btree indeks på (x, y, z) . Derudover er alle tre kolonner NOT NULL (implicit), hvilket er hovedforskellen mellem en PRIMARY KEY og et UNIQUE INDEX .
Udover åbenlyse begrænsninger på dine data, har multi-kolonne indekset også en noget anden effekt på udførelsen af forespørgsler end tre individuelle indekser på x , y og z .
Relateret diskussion på dba.SE:
- Arbejdning af indekser i PostgreSQL
Med eksempler, benchmarks, diskussion og udsigter til den nye funktion i kun-indeksscanninger i Postgres 9.2.
Især en primær nøgle på (x, y, z) vil fremskynde forespørgsler med betingelser på x , (x,y) eller (x,y,z) optimalt. Det vil også hjælpe med forespørgsler på y , z , (y,z) eller (x,z) men i langt mindre omfang.
Hvis du har brug for at fremskynde forespørgsler på de sidstnævnte kombinationer, vil du måske ændre rækkefølgen af kolonnen i din PK-begrænsning og/eller oprette et eller flere ekstra indekser. Se:
- Er et sammensat indeks også godt til forespørgsler i det første felt?