Sha*_*pta 9 sql-server indexing database-performance
是否可以更改现有的非聚集索引以包含更多列作为Covered列的一部分.
例如
ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)
Run Code Online (Sandbox Code Playgroud)
想要包含Col4在上面的索引中.
添加此列会有什么影响?会有碎片还是其他什么?
Dan*_*man 23
额外包含的列的成本将增加存储和可能的碎片.由于叶节点大小增加(假设密钥不是增量的)并且对新包含列的更新增加了长度,因此与旧索引相比,碎片将略微增加.
考虑使用CREATE INDEX ... WITH DROP EXISTING来执行此任务.这将避免删除旧索引并避免排序,利用现有索引键序列进行重建:
CREATE INDEX IX_NC_TableName_ColumnName
ON TableName(ColumnName)
INCLUDE(Col1, Col2, Col3, Col4)
WITH(DROP_EXISTING = ON);
Run Code Online (Sandbox Code Playgroud)