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?

25
demandé sur Erwin Brandstetter 2012-07-06 00:25:17

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.

58
répondu Erwin Brandstetter 2018-04-18 09:52:49

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.

2
répondu Milen A. Radev 2012-07-05 20:42:48

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

1
répondu Dondi Michael Stroma 2012-07-05 20:54:43