对于非 PK 唯一标识符,我应该使用索引还是唯一键?

Sco*_*tie 4 uniqueidentifier index-tuning sql-server-2014

使用 Sql Server 2014,我有几个表,其中 PK 字段是 int,但我也有一个需要查询的 UniqueIdentifier 字段。该字段将始终是唯一的。

我正在为这些添加索引,并且可以选择IndexUnique Key

选择其中一个有什么好处吗?

ind*_*iri 8

唯一键是索引。如果你的值保证是唯一的,这是最好的选择。

唯一键:唯一键强制定义它们的列的唯一性。唯一键在列上创建非聚集索引。唯一键只允许一个 NULL 值。


Joh*_*ner 5

这里有一些尚未提及的事情。

首先,UNIQUE 约束也可用于参照完整性。根据关于Unique Constraints 和 Check Constraints的 BOL 文章:

UNIQUE 约束可以被 FOREIGN KEY 约束引用。

这可能对您的数据库设计有所帮助,具体取决于您希望获得的复杂程度,但更重要的是,正如Grant Fritkey 所解释的那样,如果您确实在其上创建了 FOREIGN KEY 约束,它还可以帮助提高某些类型查询的性能。

其次,这可能是更重要的事实,即使索引定义完全相同,UNIQUE 约束也可能是它的非 UNIQUE 等效项的较小索引。当非聚集索引被定义为 UNIQUE 时,聚集键被隐式存储为(一个)INCLUDE 列(因为非聚集索引必须指向聚集键)。或者,如果非聚集索引未定义为 UNIQUE,则聚集键隐式附加到非聚集索引键,并将存在于索引的所有级别(使其更大)。Kalen Delaney 在她关于非聚集索引键更多关于非聚集索引键的帖子中解释了为什么会出现这种情况的原因要好得多。