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