是否可以更改现有的非聚集索引以包含更多列作为覆盖列的一部分。
例如
ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)
想要在上述索引中包含 Col4
。
添加此列会产生什么影响?会不会出现碎片或者其他什么情况?
最佳答案
额外包含的列的成本将是增加存储和潜在的碎片。与旧索引相比,由于叶节点大小增加(假设键不是增量)并且更新新包含列会增加长度,碎片将略有增加。
考虑使用 CREATE INDEX...WITH DROP EXISTING 来执行此任务。这将避免删除旧索引并避免排序,利用现有索引键序列进行重建:
CREATE INDEX IX_NC_TableName_ColumnName
ON TableName(ColumnName)
INCLUDE(Col1, Col2, Col3, Col4)
WITH(DROP_EXISTING = ON);
关于sql-server - 更改 SQL Server 中的非聚集索引以添加更多包含的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942756/