为什么SQL Server 2008建议我将主键列作为索引中的包含列

Rai*_*ine 4 indexing sql-server-2008

SQL Server 2008告诉我在"包含的列"字段中的索引中包含主键.我以为PK是自动返回的所有索引?

mar*_*c_s 6

否 - 不是主键 - 聚类键是.

默认情况下,这在SQL Server中是相同的 - 但它不一定是.很可能在这个表中,PK与集群密钥不同.在这种情况下,索引不会对PK有任何了解.

主键是一个逻辑结构,可以唯一且清晰地标识表中的每一行.您将它用于FK约束等.

另一方面,聚类键是物理索引 - 它是"街道地址"或存储实际物理数据的页码.因此,它包含在同一个表的每个非聚集索引中 - 一旦在非聚集索引中找到了一个条目,它就可以查找实际的数据行.

更新:好的,所以我无法抗拒地问"索引女王",金伯利·特里普,关于她对这个话题的看法 - 这是她的答案:

如果PK实际上是CL键,那么你是对的......它会自动地存在于那里.至于他被告知的"哪里" - 我不确定(DMV,DTA,某处?).无论如何,我确信无论他使用什么工具,只需要查询所需的内容.意思是,该工具甚至没有看到它是否是CL键...显式添加它不会添加它两次所以它根本不是什么大不了的.

这有帮助吗?