在数据库中,密钥和索引之间的区别是什么?

jm.*_*jm. 12 database-design

例如,在SQLServer中,如果我在其上设置了"unique"的索引,那么它与键的不同之处是什么?

我如何知道何时使用Key vs. Indexed字段?

Eli*_*lie 18

具有唯一值的字段本质上是关键.但是,键用于唯一标识表中的行,而索引用于对表中的行进行排序或分组.密钥最初设置后不应更改,因为它可能会引用到数据库中的其他位置.但是,索引字段可以自由更改.


paw*_*que 9

键标识存储在数据库中的行.索引是一种结构,就像书末一那样的结构.在书的最后,您会看到几个带有单词的页面,您可以在其中找到这些单词.这些页面是索引,数据库的情况也是如此.索引包含密钥及其位置.它可以帮助您找到行的位置.如果是书籍,索引会告诉您哪个页面可以找到该单词.数据库索引具有相同的功能.

正如许多人提到的那样,索引是用b树实现的.但是,这只是一个实现细节.有很多方法可以实现索引.

  • 将"关键"视为页码,并将"索引"视为此处所述......优秀的相关性. (3认同)
  • 这是一个很好的解释 - 特别是因为从新手到中级数据库用户的角度来看问题似乎更多. (2认同)

kem*_*002 5

键唯一标识表中的一行。索引是基于表中字段的行顺序。一个表可以有多个索引,因为索引可以只是系统用来搜索然后查找实际行的一组字段的特定顺序。从技术上讲,系统只能使用一个键来识别一行。大多数情况下,这也是主索引,但并非必须如此。


Jon*_*ter 5

密钥用于维护数据完整性,索引用于维护数据库性能。考虑一下您要解决的任何问题,这将引导您朝着正确的方向发展。


Wal*_*tty 5

密钥(声明)是一种约束.如果缺少任何密钥数据,或者密钥数据与表中已有的行重复,则会阻止将行输入到表中.

索引是一种数据结构,允许在给定索引中使用的列(字段)的值的情况下快速查找一行或多行.索引也可用于加速某些其他类型的查询.例如,合并连接使用构成连接条件的两列上的索引(如果这些索引都在那里).DBMS是否将执行合并连接取决于查询优化器,表的大小以及所需索引的存在.

为了稍微混淆这个问题,一些文献提到了索引用作"索引键"的列.相同的文献通常将主键和外键称为"逻辑键".同样的文献通常将密钥称为表的逻辑特征,而索引则称为表的物理特征.

当您声明主键时,大多数DBMS将为您创建索引.这种行为有两个原因.首先,在没有索引的情况下检测重复项需要花费很长时间才能在大表上进行.第二个是你可能会根据主键进行大量的查找,而且这些查找在索引中的运行速度要快得多.