是否可以更改现有的非聚集索引以包含更多列作为涵盖列的一部分。
e.g。
ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)
想要在上面的索引中包含Col4
。
添加此列会有什么影响?会有碎片还是其他什么?
答案 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);