2012-07-05 12 views
22

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

+2

Voulez-vous dire que MySQL crée ** trois ** * index *? Semble terriblement étrange –

Répondre

52

Si vous créez une clé primaire composite, sur (x, y, z), PostgreSQL l'implémente à l'aide d'un index multi-colonnes UNIQUE sur (x, y, z). En outre, les trois colonnes doivent être NOT NULL, ce qui est la principale différence entre un PRIMARY KEY et un UNIQUE INDEX.

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

Nous avons eu une discussion très approfondie à ce sujet récemment on dba.SE in this related question. Avec des exemples, des repères, des discussions et des perspectives à la prochaine fonctionnalité de index-only scans in version 9.2.

En particulier, une clé primaire sur (x, y, z) va accélérer les requêtes avec des conditions sur x, (x,y) ou (x,y,z) de façon optimale. Il aidera également avec des requêtes sur y, z, (y,z) ou (x,z) mais dans une mesure beaucoup moindre.

Si vous devez accélérer les requêtes sur ces dernières combinaisons, vous pouvez créer un ou plusieurs index supplémentaires.

2

Yes:

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

+1

Je pense que la question était de savoir si chaque colonne obtient son propre index. –

+0

D'accord. La question n'est pas de savoir si 1 index multicolonne est créé automatiquement mais bien si 3 index à une seule colonne sont créés. Et la réponse est non. Votre réponse est toujours pertinente car elle fournit des informations supplémentaires, après avoir été édité bien sûr. En fait, la réponse de @ dondi-michael-stroma est plus pertinente que celle qui a été choisie par le demandeur d'origine. – Chucky

1

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