如果数据库具有属性A1、A2、A3...An和A1,则A2和A3可以一起组成复合密钥(),那么使用代理键而不是复合键更好吗?
使用代理键将提高记录的插入执行速度(这支持替代项而不是复合键),但是如果使用代理键(这支持复合密钥),基于属性A1、A2和A3的选择、更新和删除查询将大大减慢。
在这样的条件下,在性能上哪一个更好?代理键还是复合密钥?
发布于 2015-05-24 04:48:28
在几乎所有的测试中,代理键比自然密钥几乎没有性能优势。自然键也有更容易使用的优点。这里有一个更好的写作。。
发布于 2015-05-24 05:14:24
性能并不是选择是否实现代理主键的主要考虑因素。
我们发现理想的主键有几个理想的属性。
没有“规则”规定选择作为主键的候选键必须具有所有这些属性,但由于各种原因,这些属性是可取的。
甚至没有一个“规则”说所有表都需要一个主键。但我们认为他们应该这么做。
成功的软件系统是使用代理密钥和自然密钥构建的。
在性能方面,并没有那么大的差别可以证明。但是要考虑这一点:如果一个实体表有一个主键,这个主键是一个由几个“大”列组成的复合键,那么必须在具有该实体表的外键引用的任何表中重复这些相同的大列,并且在某些存储引擎(InnoDB)中,这些列在每个索引中都要重复。
但业绩并不是真正的决定因素。(任何认为性能应该是选择候选密钥作为主键的决定因素的人都没有充分考虑到这一点。)
就“更容易使用”而言,许多开发人员发现使用单个列作为主键比使用由两列、三列或更多列组成的复合键更容易。
一些选择自然键作为主键的开发人员后来被他们选择的候选密钥烧掉了。这并不是因为它是一个天然的密钥,而是因为在开发过程中,“新的”需求被“发现”了,结果是他们选择作为主键的候选密钥并不总是唯一的,或者它不是不被更改的,或者它并不是真正的匿名的。
有许多软件项目已经成功地使用了自然键,复合键作为主键。就像成功地使用代理键作为主键一样。
https://stackoverflow.com/questions/30420146
复制相似问题