Om du skapar en sammansatt primärnyckel, på (x, y, z)
, PostgreSQL implementerar detta med hjälp av en UNIQUE
btree-index med flera kolumner på (x, y, z)
. Dessutom är alla tre kolumnerna NOT NULL
(implicit), vilket är huvudskillnaden mellan en PRIMARY KEY
och ett UNIQUE INDEX
.
Förutom uppenbara begränsningar för din data, har indexet med flera kolumner också en något annorlunda effekt på prestandan för frågor än tre individuella index på x
, y
och z
.
Relaterad diskussion på dba.SE:
- Arbeta med index i PostgreSQL
Med exempel, riktmärken, diskussion och syn på den nya funktionen för endast indexskanningar i Postgres 9.2.
I synnerhet en primärnyckel på (x, y, z)
kommer att påskynda frågor med villkor på x
, (x,y)
eller (x,y,z)
optimalt. Det kommer också att hjälpa till med frågor på y
, z
, (y,z)
eller (x,z)
men i mycket mindre utsträckning.
Om du behöver snabba upp frågorna om de senare kombinationerna, kanske du vill ändra kolumnordningen i din PK-begränsning och/eller skapa ett eller flera ytterligare index. Se:
- Är ett sammansatt index också bra för frågor i det första fältet?