【问题标题】:Is it ok to include a lot of columns in a nonclustered index on SQL Server?可以在 SQL Server 的非聚集索引中包含大量列吗?
【发布时间】:2019-03-22 02:58:56
【问题描述】:

举个例子:

CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
ON Person.Address (PostalCode)  
INCLUDE (AddressLine1);  
GO  

如果我在 INCLUDE 列表中包含更多列,例如:

CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
ON Person.Address (PostalCode)  
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID, Latitude, Longitute, Zip, Country, etc... );  
GO   

这是否需要更多磁盘空间?

或者换一种说法:INCLUDE 列表中包含的数据是否在索引的叶节点上重复?

【问题讨论】:

  • 非聚集索引中的所有内容都是重复数据,无论是在键中还是在包含的列中。这样的索引会有很大的开销。
  • 是的。您可能可以在这里找到对您问题的更深入的答案:stackoverflow.com/questions/41791413/…
  • 在规模的极端,包括索引中的每一列实际上意味着您将表存储两次,其中行的顺序不同。

标签: sql-server tsql indexing


【解决方案1】:

是的。

这正是包含的原因:牺牲一些空间,但在需要包含的列时进行(一些)查询而不必进行键查找,而是从索引本身获取它们。

【讨论】:

  • 值得指出的是,您不仅要牺牲空间,还要在修改上花费更多的 I/O。当然,权衡是否值得取决于。
猜你喜欢
  • 2018-01-19
  • 2011-06-02
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多