Pokud vytvoříte složený primární klíč, na (x, y, z)
, PostgreSQL to implementuje pomocí jednoho UNIQUE
vícesloupcový index btree na (x, y, z)
. Všechny tři sloupce jsou navíc NOT NULL
(implicitně), což je hlavní rozdíl mezi PRIMARY KEY
a UNIQUE INDEX
.
Kromě zjevných omezení pro vaše data má vícesloupcový index také poněkud odlišný vliv na výkon dotazů než tři jednotlivé indexy na x
, y
a z
.
Související diskuze na dba.SE:
- Práce s indexy v PostgreSQL
S příklady, srovnávacími testy, diskusí a výhledy na novou funkci pouze indexové skenování v Postgresu 9.2
Konkrétně primární klíč na (x, y, z)
urychlí dotazy s podmínkami na x
, (x,y)
nebo (x,y,z)
optimálně. Pomůže také s dotazy na y
, z
, (y,z)
nebo (x,z)
ale v mnohem menší míře.
Pokud potřebujete urychlit dotazy na poslední kombinace, možná budete chtít změnit pořadí sloupců v omezení PK a/nebo vytvořit jeden nebo více dalších indexů. Viz:
- Je složený index vhodný také pro dotazy na první pole?