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

时间:2011-03-21 07:31:21

标签: database primary-key

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

4 个答案:

答案 0 :(得分:40)

主键是一种特殊的索引:

  • 只能有一个;
  • 它不能为空;和
  • 它必须是唯一的。

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

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

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

答案 1 :(得分:15)

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

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

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

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

答案 2 :(得分:3)

Oracle数据库通过在唯一键或主键上创建唯一索引,对表强制执行UNIQUE键或PRIMARY KEY完整性约束。启用约束时,数据库将自动创建此索引。

您可以使用SQL语句CREATE INDEX 显式创建索引(在完整性约束之外)。

索引可以是唯一的也可以是非唯一的。唯一索引保证表中没有两行在键列(或列)中具有重复值。非唯一索引不会对列值施加此限制。

使用CREATE UNIQUE INDEX语句创建唯一索引。

指定与约束关联的索引

如果您需要对与UNIQUE and PRIMARY KEY 约束关联的索引进行更明确的控制,则数据库允许您:

1. Specify an existing index that the database is to use 
   to enforce the constraint
2. Specify a CREATE INDEX statement that the database is to use to create 
   the index and enforce the constraint

使用USING INDEX子句指定这些选项。

示例:

 CREATE TABLE a (
 a1 INT PRIMARY KEY USING INDEX (create index ai on a (a1)));

http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm

答案 3 :(得分:0)

其他响应正在定义主键,而不是主索引。

主索引不是主键上的索引。

主索引是表的数据结构,但仅当您的数据结构由主键进行排序时,这样才能实现高效查找,而无需单独的数据结构来通过主索引查找记录键。

(我知道的)所有数据库都有主键。

并非所有数据库都有主索引。默认情况下,大多数不会在主键上建立二级索引的人。