Clé primaire composite PostgreSQL
dans MySQL, quand je crée une clé primaire composite, disons avec les colonnes X, Y, Z
, alors les trois colonnes deviennent des index automatiquement. La même chose pour Postgres?
3 réponses
si vous créez une clé primaire composite, sur (x, y, z)
, PostgreSQL implémente ceci à l'aide d'un UNIQUE
index BTREE multi-colonnes sur (x, y, z)
. En outre, tous les trois colonnes doivent être NOT NULL
, bien sûr, qui est la principale différence entre un PRIMARY KEY
et un UNIQUE INDEX
.
outre les restrictions évidentes sur vos données, le multi-colonne index a également un effet légèrement différent sur le exécution de requêtes que trois index individuels sur x
, y
et z
.
nous avons eu une discussion très approfondie à ce sujet récemment sur dba.SE in this related question . Avec des exemples, des benchmarks, des discussions et des perspectives à la fonctionnalité à venir de index-only scans dans la version 9.2 .
En particulier, une clé primaire sur (x, y, z)
sera accélérez les requêtes avec des conditions sur x
, (x,y)
ou (x,y,z)
de manière optimale. Il sera également vous aider avec des requêtes sur y
, z
, (y,z)
ou (x,z)
, mais dans une moindre mesure.
si vous avez besoin d'accélérer les requêtes sur ces dernières combinaisons, vous pouvez changer l'ordre de la colonne dans votre contrainte PK ou créer un ou plusieurs index supplémentaires.
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 à plusieurs colonnes, s'il y a lieu), et est le mécanisme qui impose la contrainte.
Non, vous obtenez un index pour la clé primaire à trois colonnes.