主键和索引键之间有什么区别

pav*_*van 30 database primary-key

任何人都可以告诉我主键和索引键之间的区别.什么时候用哪个?

pax*_*blo 41

主键是一种特殊的索引:

  • 只可以有一个人;
  • 它不能是可空的; 和
  • 它必须是独一无二的.

您倾向于使用主键作为行的最自然的唯一标识符(例如社会安全号码,员工ID等等,尽管有一种思想认为您应该始终使用人工代理键​​).

另一方面,索引可用于基于其他列的快速检索.例如,员工数据库可能将您的员工编号作为主键,但也可能在您的姓氏或部门上有索引.

这两个索引(姓氏和部门)都会禁止NULL(可能)并允许重复(几乎可以肯定),它们对于加快查询寻找任何人(例如)姓氏'Corleone'或在'HitMan'部门.

  • 一把钥匙不是一种索引!密钥(最小超级密钥)是一组属性,其值对于每个元组都是唯一的.索引是一种性能优化功能,可以更快地访问数据. (11认同)
  • 您应该提到主键始终被索引,这意味着主键也始终是索引键. (4认同)
  • @Gabe,我_认为_这只是说明主键是一种索引。声明索引已建立索引对我来说似乎有点多余,但如果您能提出可行的更改(我不能,但这可能只是我的限制),我将欢迎您的意见。 (2认同)
  • @Gabe 没有根本原因为什么必须始终对主键进行索引,尽管这样做通常是个好主意。键和索引是根本不同且不相关的东西 - 不要混淆它们。 (2认同)

nvo*_*gel 19

键(最小超级键)是一组属性,其值对于每个元组(在某个时间点表中的每一行)都是唯一的.

索引是一种性能优化功能,可以更快地访问数据.

键通常是索引编制的好选择,一些DBMS会自动为键创建索引,但不一定如此.

短语"索引键"混合了这两个完全不同的单词,如果你想避免任何混淆,可能最好避免使用."索引键"有时用于表示"索引中的属性集".但是,所讨论的属性集不一定是关键,因为它们可能不是唯一的.

  • 确实,“主”键与非主键没有什么不同。 (2认同)