在SQL Server中,我应该为标识列创建索引,还是它会自动创建?

27

我相信当我创建一个 identity 列时,它会自动创建索引,但我不确定是否完全正确。

我应该为 identity 列创建索引,还是它会自动生成?

3个回答

26
create table test (Id int identity)
go
sp_help test
对象“test”没有任何索引,或者您没有权限。
对象“test”上未定义任何约束,或者您没有权限。
通常情况下,您会在标识列上创建唯一索引,这将加快查找速度。
通常您希望将标识列作为“聚集索引”(Id int identity primary key是快捷符号),这意味着表格在磁盘上的排列顺序与您的标识列相同。这对插入操作进行了优化,因为待插入的页面往往在内存中。在某些情况下,如果您经常在表中的其他数据上进行范围查找,可以考虑聚集其他列,因为SQL Server每个表只允许一个聚集索引。

13
如果你创建了一个带有 PRIMARY KEY 约束的列,将默认创建一个聚集索引(假设这是一个新表,没有定义此类索引)。
有一个 IDENTITY 字段与此无关。
所以,回答你的问题——如果你要查询/排序这个字段且它不是主键,你应该在上面定义一个索引(经验法则,始终针对你的场景进行测试)。

1

默认情况下,您的主键列将被转换为聚集索引;这是一种特殊的索引,它与数据不分离 - 相反,数据按该索引的值在表中排序。

我说“默认情况下”,因为如果您想要,可以将聚集索引更改为另一个字段。但是,如果您已经为主键选择了一个良好的标识值,几乎永远不需要更改此设置。


1
你的回答中与IDENTITY列的关系在哪里? - marc_s
1
正如其他答案中所指出的那样,身份列与聚集索引(或任何其他类型的索引)没有直接关系。我认为他混淆了身份和主键,因此我解释了什么是默认情况下自动成为聚集索引的内容。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接