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?