在 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 中更改非聚集索引以添加更多包含的列的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver的索引

sql server 索引总结三

SQL Server:聚集和非聚集索引[重复]

SQL Server索引

SQL SERVER 聚集索引 非聚集索引 区别

SQL Server 为一列创建多个非聚集索引与在一个索引中创建多个列