如果指定了非聚集主键约束,则可以在主键列以外的列上创建聚簇索引。 http://msdn.microsoft.com/en-us/library/ms186342.aspx
所以上面告诉我:我可以在除主键之外的列上创建聚簇索引。
我认为它还传达了主键应该是非聚簇主键或聚簇键。主键是否可能没有编入索引?
更重要的是:
创建UNIQUE约束时,会创建唯一的非聚簇索引以默认强制执行UNIQUE约束。如果表上的聚簇索引尚不存在,则可以指定唯一的聚簇索引。
这是否意味着唯一约束必须创建聚簇索引或非聚簇索引?
答案 0 :(得分:13)
主键是否可以编入索引?
不,不是。
需要某种索引来监管PRIMARY KEY
,否则需要扫描每个插页上的整个表格(以确保唯一性)。
来自docs:
数据库引擎自动创建唯一索引以强制
PRIMARY KEY
约束的唯一性要求。如果表上尚不存在聚簇索引或未显式指定非聚簇索引,则会创建唯一的聚簇索引以强制执行PRIMARY KEY
约束。
这是否意味着唯一约束必须创建聚簇索引或非聚簇索引?
是的,出于同样的原因。
PRIMARY KEY
和UNIQUE
是逻辑概念,而索引只是有效实施它们的副作用。因此,严格来说,ALTER TABLE ADD CONSTRAINT UNIQUE
和CREATE UNIQUE INDEX
意味着不同的事情。
如果在未来,一些聪明的头脑发明了一种使用泡利原理或量子纠缠的方法或任何在物理层面上强制执行唯一性的方法,SQL Server 2155
可能会用它来强制执行约束,但它仍然需要为索引创建B树。
答案 1 :(得分:1)
简短回答:不,
SQL Server中的每个表都应该只有一个聚簇索引。其他索引(非群集)使用聚簇索引。主键通常是聚簇索引。但是,与外键不同,主键总是被索引。
http://www.sqlfiddle.com/#!6/972f0/1