有人能告诉我主键和索引键的区别吗?何时使用哪个?
主键是一种特殊类型的索引,具有以下特点:
通常使用主键作为最自然的行唯一标识符,例如社会保障号码、员工编号等,尽管有一种思路认为应该始终使用人造代理键。
另一方面,索引可用于基于其他列进行快速检索。例如,员工数据库可能将您的员工编号作为主键,但也可能在您的姓氏或部门上建立索引。
这两个索引(姓氏和部门)都会禁止NULL(可能)并允许重复(几乎肯定),它们将有助于加快寻找姓‘Corleone’或在“HitMan”部门工作的任何人的查询。
一个关键字(最小超键)是一组属性,其值对于每个元组(在某个时间点上表中的每一行)都是唯一的。
索引是一种性能优化功能,可以更快地访问数据。
关键字通常是索引的好选择,一些数据库管理系统会自动为关键字创建索引,但不一定是这样的。
“索引键”这个短语将这两个非常不同的词混合在一起,如果想避免任何混淆,最好避免使用它。有时,“索引键”用于表示“索引中的属性集”。 但是,所涉及的属性集不一定是关键字,因为它们可能不是唯一的。
Oracle Database会在表上创建一个唯一索引或主键完整性约束,以确保数据的唯一性。当启用此约束时,数据库会自动创建该索引。
您可以使用SQL语句CREATE INDEX
显式地创建索引(约束之外)。
索引可以是唯一的或非唯一的。唯一索引确保表的关键列(或多个列)中没有两行具有重复值。非唯一索引不对列值施加此限制。
使用CREATE UNIQUE INDEX
语句创建唯一索引。
如果您需要更明确地控制与UNIQUE和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
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