web-dev-qa-db-fra.com

Clé primaire composite PostgreSQL

Dans MySQL, lorsque je crée une clé primaire composite, disons avec des colonnes X, Y, Z, les trois colonnes deviennent automatiquement des index. Est-ce la même chose pour Postgres?

36
user1467855

Si vous créez une clé primaire composite, le (x, y, z), PostgreSQL l'implémente à l'aide d'un UNIQUE index btree multi-colonnes sur (x, y, z). De plus, les trois colonnes sont NOT NULL (implicitement), qui est la principale différence entre un PRIMARY KEY et un UNIQUE INDEX.

Outre les restrictions évidentes sur vos données, le index multi-colonnes a également un effet quelque peu différent sur les performances des requêtes que trois index individuels sur x, y et z.

Discussion connexe sur dba.SE:

Avec des exemples, des repères, une discussion et Outlook sur la nouvelle fonctionnalité de scans d'index uniquement dans Postgres 9.2 .

En particulier, une clé primaire sur (x, y, z) accélérera les requêtes avec des conditions sur x, (x,y) ou (x,y,z) de manière optimale. Il aidera également avec les requêtes sur y, z, (y,z) ou (x,z) mais dans une bien moindre mesure.

Si vous devez accélérer les requêtes sur ces dernières combinaisons, vous souhaiterez peut-être modifier l'ordre des colonnes dans votre contrainte PK et/ou créer un ou plusieurs index supplémentaires.

85
Erwin Brandstetter

Non, vous obtenez un index pour la clé primaire à trois colonnes.

1

Oui :

PostgreSQL crée automatiquement un index unique lorsqu'une contrainte unique ou une clé primaire est définie pour une table. L'index couvre les colonnes qui constituent la clé primaire ou la contrainte unique (un index multicolonne, le cas échéant), et est le mécanisme qui applique la contrainte.

1
Milen A. Radev