Als u een samengestelde primaire sleutel maakt, op (x, y, z) , PostgreSQL implementeert dit met behulp van een UNIQUE btree-index met meerdere kolommen op (x, y, z) . Bovendien zijn alle drie de kolommen NOT NULL (impliciet), wat het belangrijkste verschil is tussen een PRIMARY KEY en een UNIQUE INDEX .
Naast duidelijke beperkingen op uw gegevens, heeft de index met meerdere kolommen ook een iets ander effect op de prestaties van zoekopdrachten dan drie afzonderlijke indexen op x , y en z .
Gerelateerde discussie over dba.SE:
- Werking van indexen in PostgreSQL
Met voorbeelden, benchmarks, discussie en visie op de nieuwe functie van index-only scans in Postgres 9.2.
In het bijzonder een primaire sleutel op (x, y, z) versnelt zoekopdrachten met voorwaarden op x , (x,y) of (x,y,z) optimaal. Het helpt ook bij vragen over y , z , (y,z) of (x,z) maar in veel mindere mate.
Als u query's op de laatste combinaties moet versnellen, wilt u misschien de volgorde van de kolommen in uw PK-beperking wijzigen en/of een of meer aanvullende indexen maken. Zie:
- Is een samengestelde index ook goed voor zoekopdrachten op het eerste veld?