Cette question se pose après la lecture d'un commentaire dans cette question:
Lorsque vous créez une table plusieurs-à-plusieurs, devez-vous créer une clé primaire composite sur les deux colonnes de clé étrangère, ou créer une clé primaire «ID» de substitution à incrémentation automatique, et simplement mettre des index sur vos deux colonnes FK (et peut-être une contrainte unique)? Quelles sont les implications sur les performances de l'insertion de nouveaux enregistrements / de la réindexation dans chaque cas?
Fondamentalement, ceci:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
vs ceci:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Le commentateur dit:
faire des deux ID le PK signifie que la table est physiquement triée sur le disque dans cet ordre. Donc, si nous insérons (Part1 / Device1), (Part1 / Device2), (Part2 / Device3), alors (Part 1 / Device3) la base de données devra séparer la table et insérer la dernière entre les entrées 2 et 3. Pour beaucoup d'enregistrements, cela devient très problématique car cela implique de mélanger des centaines, des milliers ou des millions d'enregistrements chaque fois qu'un est ajouté. En revanche, un PK à auto-incrémentation permet aux nouveaux enregistrements d'être cloués à la fin.
La raison pour laquelle je pose la question est que j'ai toujours été enclin à utiliser la clé primaire composite sans colonne d'incrémentation automatique de substitution, mais je ne suis pas sûr que la clé de substitution soit réellement plus performante.