关系表中的主键。那些纯关系表中的复合主键还是唯一主键?
您会推荐在MySQL中使用哪种设计以获得高性能?见图表
技术优势和劣势!
感谢大家!
这实际上取决于您正在执行的查询类型......
如果您添加一个额外的代理项,您最终会为每次插入、更新和删除进行两次唯一检查,而不是一次检查。这使得复合键听起来正确。
但是,如果您经常在其他外键中引用该主键,那么复合选项意味着您最终存储了两倍的信息,并且在加入时需要做更多的工作。这使得单键听起来正确。
我同意@Denis,这取决于你在做什么。要考虑的另一件事是 InnoDB 将以 PK 顺序将行存储在磁盘上。如果您正在执行诸如id1 BETWEEN a AND b
. 每次移动这些读头大约需要 10 毫秒,如果查询的行是分散的,它会加起来。正是出于这些原因,您可能会考虑非规范化以将您需要的数据放在一行中。
根据 Elmasri 和 Navathe(在数据库系统基础中)的说法,您应该选择选项 A,因为人工主键是不必要的,并且建议您进行非规范化设计(他们的 POV)。
在连接表的情况下,我碰巧同意作者的观点。否则我认为在实践中使用人工键是非常好的。
我不认为连接表的性能影响是巨大的。