15

我的一位同事之一的印象是,当向SQL Server 2008中的表添加索引时,PK的索引也被添加到该索引中。因此,如果您使用的是较宽的主键,那么该键也将包含在新索引中,从而大大增加所使用的磁盘空间,超过已为PK上的索引付出的代价。之前我没有听说过,而且我的搜索到目前为止都是空的。Sql Server索引包含主键?

希望有人在这里可以指点我在相关的文档来确认或否认这一点。请?

回答

27

您的同事正在将“主键”与“聚簇索引键”相混淆(可能是因为默认情况下,在堆上创建的PK未指定nonclustered关键字将成为表的聚簇索引)。

It is true对于具有聚簇索引的表,聚簇索引键的值将作为包含列添加到所有非聚簇索引以充当行定位符。 (尽管如果它们已经是非聚集索引定义的一部分,则列不会被添加两次)。

理想的聚集索引键是

  • 独特的(要作为一个行定位它必须是唯一的 - SQL Server将在如果不添加唯一标志)
  • 窄(因为它是转载在所有非聚集索引)
  • 静态(避免不必更新在多个不同的地方价值)
  • 不断增加
+0

呀buste d SQL Server Internals从书架上预订。 RTFM总是似乎帮助我,我从来没有这样做。无论如何,这是GUID和INT作为主键/集键的所有部分。火焰开启! – Grummle 2010-10-07 15:35:13