在覆盖索引中包含主键是好还是无关紧要?

Rac*_*erX 48 t-sql sql-server

是被gooddoesn't matterbad以包括覆盖索引的主键?

CREATE NONCLUSTERED INDEX index_name_here ON dbo.table_name_here
(column_to_index_here) 
INCLUDE (primary_key_column,other_column_here)
WITH( STATISTICS_NORECOMPUTE=OFF, IGNORE_DUP_KEY=OFF, --<default junk from SSMS
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

我认为这没关系,因为PK无论如何都会在索引中.

编辑 - 澄清.
primary_key_column是聚集的,但你可以解释/提供信息,当它不是.

我将加入dbo.table_name_herecolumn_to_index_here专栏,然后将加入其他表格primary_key_columnother_column_here.

JNK*_*JNK 61

如果你正在对你的PK进行聚类,那么这并不重要.SQL Server将忽略它,因为所有非聚集索引都包含该行的聚簇索引键作为其定义的一部分.

它不会在索引中使用任何额外的空间,但将它包含在定义中是多余的.

如果您的PK未包含在聚簇索引中,那么只有在您需要将该字段作为使用索引的同一查询的一部分进行检索时才包含它.

还要记住,当您INCLUDE在索引中的字段时,它不在非叶节点中,即索引不在该值上排序.

  • 链接供参考http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx (3认同)
  • @Pac0 - 是的。SQL 博客现已消失。仍在 WBM 上 https://web.archive.org/web/20190308085816/http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx (2认同)