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

时间:2009-04-20 17:59:35

标签: database-design

例如,在SQLServer中,如果我有一个设置了'unique'的索引,那么它与一个键有什么不同?

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

11 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

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

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

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:4)

密钥用于维护数据完整性,索引用于维护数据库性能。想想你想要解决的任何问题,这将引导你朝着正确的方向前进。

答案 5 :(得分:2)

唯一是强制数据的约束,而索引将有助于在数据库中物理排序行(聚簇索引)或逻辑(非聚集索引),以便更快地检索。

答案 6 :(得分:2)

密钥应该是业务模型的行的唯一标识符。唯一索引的列可以被视为“备用密钥”。通常,SQL服务器会自动为主键创建唯一索引。

我还应该提一下,你可以索引非唯一列;诸如此类的索引用于加速索引列上的查询。

答案 7 :(得分:2)

键是唯一标识每一行的字段或字段集。通常,会有一个键被指定为主键,而现在这似乎是一个通常无意义的字段(很像页码,这对于识别页面上的内容很重要)。 p>

可以有一个带有另一个表的键的表,称为外键。例如,在在线商店的数据库中,可能有一个订单表,每个订单都有一个关联的客户,因此订单表中的每一行都有一个客户表的外键。

索引是基于表中一个或多个字段的数据结构,允许基于这些字段快速访问表。索引可以标识各个行(例如,客户电子邮件地址的索引),或者可以指示组(例如,客户的免税状态)。它的用法很像书的索引,或者像反向目录(例如通过电话号码订购的电话簿)。

密钥主要是考虑数据库的一种方式(尽管通常可以告诉数据库有关密钥的信息,因此数据库可以拒绝具有重复密钥的行)。索引是一种使数据库工作更快的方法。

答案 8 :(得分:1)

一个键总是会在场景后面有一个索引 如果您创建主键,SQL Server将创建一个支持该

的集群唯一索引

即使您创建了唯一约束,SQL Server也会创建索引

当然,唯一约束和主键之间的区别在于唯一约束允许至少1个NULL值(在SQL上多于一个的SQL上为1) 在表上只能有1个主键和许多(在sql server上为249个)唯一约束

答案 9 :(得分:1)

默认情况下,密钥在MS SQL Server中具有群集索引。

Key是每行的唯一值。

使用索引来最大化您的数据库性能。您可以根据需要创建索引。 有不同类型的索引 e.g。

  • 位图索引
  • 密集指数
  • 稀疏索引
  • 覆盖索引

答案 10 :(得分:0)

在关系数据库中定义元组的字段或属性称为键。 而索引结构用于获得快速访问。每个索引结构都与一个特定的搜索键相关联。