MySQL的。关系表中的主键。唯一ID或多个唯一键?

时间:2011-06-16 12:47:12

标签: mysql database database-design primary-key primary-key-design

关系表中的主键。这些纯关系表中的复合主键或唯一主键?

您建议在 MySQL 中使用哪种设计以获得高性能? See diagram

技术优势和劣势!

谢谢大家!

3 个答案:

答案 0 :(得分:2)

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

如果您添加额外的代理,您将最终执行两个唯一检查,而不是每个插入,更新和删除一个。这使得复合键听起来很合适。

但是,如果您不断在其他外键中引用该主键,则复合选项意味着您最终会存储两倍的信息,并且需要在加入时执行更多工作。这使得单键声音合适。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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