この質問は、この質問のコメントを読んだ後に出てきます。
多対多のテーブルを作成する場合、2つの外部キー列に複合主キーを作成するか、自動インクリメントサロゲート "ID"主キーを作成し、2つのFK列(およびおそらく一意の制約)?いずれの場合も、新しいレコードの挿入/再インデックス付けのパフォーマンスにどのような影響がありますか?
基本的に、これ:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
対これ:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
コメンターは言う:
2つのIDをPKにすることは、テーブルがディスク上で物理的にその順序でソートされることを意味します。したがって、(Part1 / Device1)、(Part1 / Device2)、(Part2 / Device3)を挿入すると、(Part 1 / Device3)データベースはテーブルを分割し、最後のテーブルをエントリ2と3の間に挿入する必要があります。多くのレコードでは、レコードが追加されるたびに数百、数千、または数百万のレコードをシャッフルする必要があるため、これは非常に問題になります。対照的に、自動インクリメントPKを使用すると、新しいレコードを最後まで追加できます。
私が質問している理由は、代理の自動インクリメント列がない複合主キーを常に実行する傾向があるためですが、代理キーの方が実際にパフォーマンスが高いかどうかはわかりません。