关于MS SQL-Server, 表的主键列是否包含在该表的常规非唯一索引中?
如果没有,将它包含在索引中是否有意义?
create table dbo.People (
PK_PersonId int not null,
PersonName nvarchar (100),
Bunch of Other Fields
,
所以在PersonName上创建索引时,添加主键列PK_PersonId是否有意义?
答案 0 :(得分:7)
在SQL Server中创建PK时,默认情况下会在这些列上创建聚簇索引
当你创建一个非聚集索引时,它指向聚簇索引,或者如果你没有聚簇索引(你的表是一个堆),它指向一个带有行定位器的表
所以换句话说,非聚集索引已经包含了PK值
答案 1 :(得分:1)
非聚集索引无论如何都会引用聚簇索引,而不是实际数据。 默认情况下,PK在SQL Server中集群。
所以,不需要添加它:如果 PersonID是由PRIMARY KEY
约束定义的聚簇索引,则隐含。
答案 2 :(得分:0)
如果您的PK也是聚集索引键(根据SQL Menace,默认值),则PK将包含在所有非聚簇索引中
答案 3 :(得分:0)
如果要创建索引来加速名称搜索,那么在非聚集索引中制作PersionId就没有意义了。非聚集索引将以与聚簇索引相同的方式引用记录,因此无论如何它都在那里。