主键和索引键有什么区别

问题描述 投票:0回答:5

谁能告诉我主键和索引键有什么区别。什么时候使用哪个?

database primary-key
5个回答
86
投票

主键是一种特殊的索引:

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

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

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

这两个索引(姓氏和部门)将不允许 NULL(可能)并允许重复(几乎肯定),并且它们对于加速查找具有(例如)姓氏“Corleone”或工作的任何人的查询非常有用在“杀手”部门。


28
投票

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

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

键通常是索引的良好候选者,一些 DBMS 会自动为键创建索引,但事实并非如此。

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


4
投票

Oracle 数据库通过在唯一键或主键上创建唯一索引来对表强制实施唯一键或主键完整性约束。当启用约束时,该索引由数据库自动创建。

您可以使用 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


1
投票

其他响应定义了主键,但没有定义主索引。

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

主索引是表的数据结构,但前提是您的数据结构按主键“排序”,从而允许高效查找,而不需要单独的数据结构来按主键查找记录。 所有数据库(据我所知)都有一个主键。

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


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.