SQL Server - 包含 PK 的索引

Der*_*omm 1 index sql-server-2005 sql-server

让我们假设我们有一个如下表:

PK -- nonclustered primary key
Col1 -- unique clustered
Col2
Col3
Run Code Online (Sandbox Code Playgroud)

这是指数:

nonclustered index on (Col2, Col3)
Run Code Online (Sandbox Code Playgroud)

与此索引的任何不同:

nonclustered index on (Col2, Col3) include (PK)
Run Code Online (Sandbox Code Playgroud)

如果我的 PK 是集群的而不是非集群的怎么办?现在它有所作为/没有有所作为吗?

编辑添加:

我想这是一种迂回的提问方式:非聚集索引的指针是基于聚集索引还是主键返回到表?我假设使用的是聚集索引 RID。

JNK*_*JNK 7

聚集索引键作为行标识符包含在每个非聚集索引中。

SQL Server 只是忽略INCLUDE聚集索引键中的一个。

如果您的 PK 索引是,NONCLUSTERED那么它将不会包含在所有其他 NC 索引的每一行中。

您可以通过制作两个相同的索引(一个有INCLUDE(ClusterKey)一个没有)来自己测试,并比较大小。它们将是相同的,即使在数亿行上也是如此。