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?