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