7

如果指定了非聚集主键约束,则可以在主键列以外的列上创建聚集索引。 http://msdn.microsoft.com/en-us/library/ms186342.aspx

所以上面告诉我:我可以在主键以外的列上创建聚集索引。

我认为它还传达了主键应该是非聚集主键或聚集键。是否可能没有索引主键?

更重要的是:

创建 UNIQUE 约束时,默认情况下会创建唯一的非聚集索引以强制执行 UNIQUE 约束。如果表上的聚集索引尚不存在,您可以指定唯一聚集索引。

这是否意味着唯一约束必须创建聚集索引或非聚集索引?

4

2 回答 2

14

是否可能没有索引主键?

不,这不对。

需要某种索引来监管PRIMARY KEY,否则需要在每次插入时扫描整个表(以确保唯一性)。

文档

数据库引擎自动创建唯一索引以强制PRIMARY KEY约束的唯一性要求。如果表上不存在聚集索引或未显式指定非聚集索引,则会创建唯一的聚集索引以强制执行PRIMARY KEY约束。


这是否意味着唯一约束必须创建聚集索引或非聚集索引?

是的,出于同样的原因。


PRIMARY KEY并且UNIQUE是逻辑概念,而索引只是具有有效实施它们的副作用。所以,严格来说,ALTER TABLE ADD CONSTRAINT UNIQUECREATE UNIQUE INDEX意思不同。

如果将来某个聪明人发明了一种方法来使用泡利原理或量子纠缠或其他任何方法在物理级别上强制唯一性,SQL Server 2155则可能会使用它来强制执行约束,但它仍然必须为索引创建 B-Tree .

于 2012-05-18T19:18:04.363 回答
1

简短的回答:不,

SQL Server 中的每个表都应该只有一个聚集索引。其他索引(非聚集)使用聚集索引。主键通常是聚集索引。但是与外键不同,主键总是被索引。

http://www.sqlfiddle.com/#!6/972f0/1
于 2012-05-18T19:29:47.183 回答