主键是否应包含在常规索引中

时间:2010-08-29 12:12:22

标签: sql-server indexing

关于MS SQL-Server, 表的主键列是否包含在该表的常规非唯一索引中?

如果没有,将它包含在索引中是否有意义?

create table dbo.People (
PK_PersonId int not null,
PersonName nvarchar (100),
Bunch of Other Fields
,

所以在PersonName上创建索引时,添加主键列PK_PersonId是否有意义?

4 个答案:

答案 0 :(得分:7)

在SQL Server中创建PK时,默认情况下会在这些列上创建聚簇索引

当你创建一个非聚集索引时,它指向聚簇索引,或者如果你没有聚簇索引(你的表是一个堆),它指向一个带有行定位器的表

所以换句话说,非聚集索引已经包含了PK值

答案 1 :(得分:1)

非聚集索引无论如何都会引用聚簇索引,而不是实际数据。 默认情况下,PK在SQL Server中集群。

所以,不需要添加它:如果 PersonID是由PRIMARY KEY约束定义的聚簇索引,则隐含

答案 2 :(得分:0)

如果您的PK也是聚集索引键(根据SQL Menace,默认值),则PK将包含在所有非聚簇索引中

http://msdn.microsoft.com/en-us/library/ms177484.aspx

答案 3 :(得分:0)

如果要创建索引来加速名称搜索,那么在非聚集索引中制作PersionId就没有意义了。非聚集索引将以与聚簇索引相同的方式引用记录,因此无论如何它都在那里。