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?