在 SQL Server 中更改非聚集索引以添加更多包含的列
Posted
技术标签:
【中文标题】在 SQL Server 中更改非聚集索引以添加更多包含的列【英文标题】:Alter Non Clustered Index in SQL Server to Add more included columns 【发布时间】:2015-07-08 16:21:03 【问题描述】:是否可以更改现有的非聚集索引以包含更多列作为覆盖列的一部分。
例如
ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)
想在上面的索引中包含Col4
。
添加此栏会有什么影响?会不会有碎片化或者其他什么?
【问题讨论】:
没有在现有索引中添加列的选项。您将需要删除并重新创建。 ALTER INDEX. @ughai:是否也适用于 Covered 列? 是的,甚至还包括列 【参考方案1】:额外包含列的成本将增加存储空间和潜在的碎片。与旧索引相比,由于叶节点大小增加(假设键不是增量的)以及如果对新包含列的更新增加长度,碎片将略微增加。
考虑对这个任务使用 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 中更改非聚集索引以添加更多包含的列的主要内容,如果未能解决你的问题,请参考以下文章