阅读此问题的评论后,出现此问题:
创建多对多表时,应该在两个外键列上创建一个复合主键,还是创建一个自动增量替代的“ ID”主键,然后将索引放在两个FK列上(也许独特的约束)?在每种情况下插入新记录/重新索引对性能有何影响?
基本上,这是:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
与这个:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
评论者说:
将两个ID设置为PK意味着表将按照该顺序在磁盘上进行物理排序。因此,如果我们插入(Part1 / Device1),(Part1 / Device2),(Part2 / Device3),则(Part 1 / Device3),数据库将必须将表分开,并在条目2和3之间插入最后一个。对于许多记录,这变得非常成问题,因为每次添加一条记录都要涉及数百,数千或数百万个记录的改组。相比之下,自动递增的PK允许将新记录附加到末尾。
我问的原因是因为我一直倾向于在没有代理自动增量列的情况下执行复合主键,但是我不确定代理键实际上是否性能更高。