代理人的表现比较复合键

时间:2015-05-24 04:41:35

标签: mysql database composite-primary-key surrogate-key

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

使用代理键可以提高记录的插入执行速度(这支持代理复合键)但 SELECT,UPDATE和DELETE 查询基于属性< strong> A1,A2&amp;如果我们使用代理键(这支持复合键超过代理键),A3 将会大大减慢。

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

2 个答案:

答案 0 :(得分:3)

在几乎所有测试中,代理键相对于自然键几乎没有性能优势。自然键还具有易于使用的优点。 A better write-up is available here

答案 1 :(得分:1)

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

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

  • 简单(单列,本机数据类型)
  • 唯一(肯定无重复值)
  • 非null (每行都有一个值)
  • 不可变(一旦分配永远不会更改)
  • 匿名(不携带&#34;信息&#34;)

没有&#34;规则&#34;这表示选择作为主键的候选键必须具有所有这些属性,但由于各种原因,这些属性是可取的。

甚至没有&#34;规则&#34;这表示所有表都需要有一个主键。但我们发现他们这样做是可取的。

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

就性能而言,可以证明并没有那么多差异。但请考虑这一点:如果实体表的主键是一个复合键,它由几个&#34; large&#34;组成。列,那些相同的大列必须在具有对该实体表的外键引用的任何表中重复,并且在某些存储引擎(InnoDB)中,那些在中重复 index。

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

对于&#34;更容易使用&#34;,许多开发人员发现更容易使用单个列作为主键而不是由两个,三个组成的复合键或更多列。

一些选择自然键作为主键的开发人员后来因选择候选键而被烧毁。不是因为它是自然键,而是因为在开发过程中,&#34; new&#34;需求被发现&#34;,结果发现他们选择作为主键的候选键并不总是唯一的,或者它不能被免除更改,或者它并不是真正的匿名。

有许多软件项目使用自然键成功,复合键作为PRIMARY KEY。就像使用代理键作为PRIMARY KEY一样成功。