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?