更改SQL Server中的非聚簇索引以添加更多包含的列

时间:2015-04-29 11:45:24

标签: sql-server indexing database-performance

是否可以更改现有的非聚集索引以包含更多列作为涵盖列的一部分。

e.g。

ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)

想要在上面的索引中包含Col4

添加此列会有什么影响?会有碎片还是其他什么?

1 个答案:

答案 0 :(得分:20)

额外包含的列的成本将增加存储和可能的碎片。由于叶节点大小增加(假设密钥不是增量的),并且对新包含列的更新增加了长度,因此与旧索引相比,碎片会略微增加。

考虑将CREATE INDEX ... WITH DROP EXISTING用于此任务。这将避免丢弃旧索引并避免排序,利用现有索引键序列进行重建:

CREATE INDEX IX_NC_TableName_ColumnName
ON TableName(ColumnName)
INCLUDE(Col1, Col2, Col3, Col4)
WITH(DROP_EXISTING = ON);