1

关系表中的主键。那些纯关系表中的复合主键还是唯一主键?

您会推荐在MySQL中使用哪种设计以获得高性能?见图表

技术优势和劣势!

感谢大家!

4

3 回答 3

2

这实际上取决于您正在执行的查询类型......

如果您添加一个额外的代理项,您最终会为每次插入、更新和删除进行两次唯一检查,而不是一次检查。这使得复合键听起来正确。

但是,如果您经常在其他外键中引用该主键,那么复合选项意味着您最终存储了两倍的信息,并且在加入时需要做更多的工作。这使得单键听起来正确。

于 2011-06-16T12:52:19.687 回答
1

我同意@Denis,这取决于你在做什么。要考虑的另一件事是 InnoDB 将以 PK 顺序将行存储在磁盘上。如果您正在执行诸如id1 BETWEEN a AND b. 每次移动这些读头大约需要 10 毫秒,如果查询的行是分散的,它会加起来。正是出于这些原因,您可能会考虑非规范化以将您需要的数据放在一行中。

于 2011-06-16T13:23:16.643 回答
1

根据 Elmasri 和 Navathe(在数据库系统基础中)的说法,您应该选择选项 A,因为人工主键是不必要的,并且建议您进行非规范化设计(他们的 POV)。

在连接表的情况下,我碰巧同意作者的观点。否则我认为在实践中使用人工键是非常好的。

我不认为连接表的性能影响是巨大的。

于 2011-06-16T12:53:37.283 回答