这个问题出现在阅读了这个问题的评论之后:
当您创建一个多对多表时,您是应该在两个外键列上创建一个复合主键,还是创建一个自动递增的代理“ ID”主键,然后只在两个 FK 列上添加索引(可能还有一个惟一的约束) ?在每种情况下插入新记录/重新索引对性能有什么影响?
基本上是这样:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
与此相反:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
评论者说:
使得这两个 ID 的 PK 意味着 表在磁盘上进行物理排序 所以如果我们插入 (第1部份/装置1)、(第1部份/装置2)、, (第2部分/第3装置) ,然后(第1部分/第3装置) 数据库将不得不破坏 把最后一张桌子分开插入 在第二条和第三条之间。对于许多人来说 记录,这变得非常成问题 因为它涉及到数百人的洗牌, 成千上万的唱片 相比之下, 自动递增的 PK 允许新的 记录要附加到最后。
我问这个问题的原因是因为我一直倾向于在没有代理自动增量列的情况下执行复合主键,但是我不确定代理键是否实际上性能更好。