4

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

使用代理提高记录的插入执行速度(这支持复合键的代理)但是如果我们使用代理键(这支持代理键上的复合键)。

在这样的条件下,哪个性能更好?代理键还是复合键?

4

2 回答 2

2

在几乎所有测试中,代理键与自然键相比几乎没有性能优势。自然键还具有更易于使用的优点。更好的文章可在此处获得

于 2015-05-24T04:48:28.387 回答
2

性能不是选择是否实现代理主键的主要考虑因素。

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

  • 简单(单列,本机数据类型)
  • 唯一的(肯定没有重复值)
  • 非空(每一行都有一个值)
  • 不可变的(一旦分配它就永远不会改变)
  • 匿名(不携带“信息”)

没有“规则”说被选为主键的候选键必须具有所有这些属性,但出于各种原因,这些属性是可取的。

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

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


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

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


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

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

有很多软件项目使用自然键和组合键作为 PRIMARY KEY 取得了成功。就像使用代理键作为主键一样成功。

于 2015-05-24T05:14:24.770 回答