Mysql 代孕与非代孕的性能比较;复合键

Mysql 代孕与非代孕的性能比较;复合键,mysql,database,composite-primary-key,surrogate-key,Mysql,Database,Composite Primary Key,Surrogate Key,如果数据库具有属性A1、A2、A3…An和A1、A2和A3可以一起形成复合键,使用代理键而不是复合键是否更好 使用代理键将提高记录的插入执行速度(这支持在复合键上使用代理键),但如果使用代理键,则基于属性A1、A2和A3的选择、更新和删除查询将大大减慢(这支持复合密钥优于代理密钥) 在这种情况下,哪一种性能更好?代理密钥还是复合密钥?在几乎所有的测试中,代理密钥的性能优势几乎没有超过自然密钥。自然密钥也有易于使用的优势。性能不是cho的主要关注点正在确定是否实现代理主键 我们发现理想的主键有几个

如果数据库具有属性A1、A2、A3…An和A1、A2和A3可以一起形成复合键,使用代理键而不是复合键是否更好

使用代理键将提高记录的插入执行速度(这支持在复合键上使用代理键),但如果使用代理键,则基于属性A1、A2和A3的选择、更新和删除查询将大大减慢(这支持复合密钥优于代理密钥)


在这种情况下,哪一种性能更好?代理密钥还是复合密钥?在几乎所有的测试中,代理密钥的性能优势几乎没有超过自然密钥。自然密钥也有易于使用的优势。

性能不是cho的主要关注点正在确定是否实现代理主键

我们发现理想的主键有几个理想的属性

  • 简单(单列,本机数据类型)
  • 唯一(绝对没有重复值)
  • 非null(每行都有一个值)
  • 不可变的(一旦分配,就不会更改)
  • 匿名(不携带“信息”)
没有“规则”规定作为主键选择的候选键必须具有所有这些属性,但出于各种原因,这些属性是可取的

甚至没有一条“规则”规定所有表都需要一个主键,但我们发现这样做是可取的

使用代理键和自然键构建了成功的软件系统


在性能方面,没有太多的差异可以证明。但是请考虑一下:如果一个实体表有一个主键,它是由几个“大”组成的复合键。列,这些相同的大列必须在任何具有对该实体表的外键引用的表中重复,并且在某些存储引擎(InnoDB)中,这些列必须在每个索引中重复

但性能并不是真正的决定因素(任何人认为性能应该是选择候选密钥的决定因素,因为主键并没有真正考虑到这一点)


由于“易于使用”,许多开发人员发现使用单个列作为主键比使用由两列、三列或更多列组成的复合键更容易

一些选择自然键作为主键的开发人员后来被他们选择的候选键烧掉了。这不是因为它是一个自然键,而是因为在开发过程中,“发现”了“新的”需求,结果表明,他们选择作为主键的候选键并不总是唯一的,或者它不能免于更改,或者它不是真正匿名的


有很多软件项目成功地使用了自然键和复合键作为主键。正如使用代理键作为主键一样成功。

这是一场持续的宗教战争。你永远不会找到赢家。我留给你的是:它不会提高插入速度,会减慢插入速度。只是因为你有一个代理键,你的A1、A2和A3仍然是你实际的主键。因此你需要对它们有一个唯一的约束,这也意味着其中可能有一个索引。你现在有两个应该有一个索引的索引。这意味着你传播的数据更少(即A1、A2、A3)在您的相关表上。这会使它们更大,但也会导致更少的联接。因此,像往常一样,“这取决于”。@LoztInSpace,如果我们使用代理键,例如
ID PRIMARY key AUTO_INCREMENT
,而不是主键(A1、A2、A3),插入速度将大大提高因为如果我们使用具有自动递增功能的轻量级主键,B树索引将快得多。因此,代理键通常会提高插入执行速度。即使代理项的插入本身比3列插入更快(我不一定同意这种说法)您忽略了一个关键点:代理就是这样。它是真实事物的占位符。您仍然需要在实际的真正主键(A1、A2、A3)中强制唯一性。因此,事实上,您需要通过引入代理密钥来做更多的工作。如果您选择不强制执行实际密钥,那么您实际上已经扔掉了您的数据模型,不再有两件事情可以进行有意义的比较。有意义吗?有趣的参考。此答案中的链接将我发送到一个页面“使用Windows 2000加密文件系统保护SQL Server数据库和备份如何影响SQL Server的性能"…似乎与MySQL中代理键与自然键的讨论没有任何关系。我认为RDBMS中的“R”意味着PKrequirement@Strawberry:完全可以发出不包含主键约束的
CREATE TABLE
语句。该表不需要唯一约束,甚至不需要NOTNULL约束是的,我们发现添加主键是可取的。但严格来说,这不是一个要求。键(每个表至少一个)是关系定义严格要求的,因此必须始终存在于关系数据库中。根据SQL标准,SQL中不需要键。如果SQL表缺少不可为空且不可还原的唯一列集,则它不是关系表。(a)有许多特定的规则(2)RDBMS中的R需要一个逻辑关系PK,一个“由数据组成”的PK。代理项(如GUID、ID等)不是由数据组成的。它们是物理指针(3)代理项破坏访问路径Ind