【问题标题】:Alter Non Clustered Index in SQL Server to Add more included columns在 SQL Server 中更改非聚集索引以添加更多包含的列
【发布时间】:2015-07-08 16:21:03
【问题描述】:

是否可以更改现有的非聚集索引以包含更多列作为覆盖列的一部分。

例如

ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)

想在上面的索引中包含Col4

添加此栏会有什么影响?会不会有碎片化或者其他什么?

【问题讨论】:

  • 没有在现有索引中添加列的选项。您将需要删除并重新创建。 ALTER INDEX.
  • @ughai:是否也适用于 Covered 列?
  • 是的,甚至还包括列

标签: sql-server indexing database-performance


【解决方案1】:

额外包含列的成本将增加存储空间和潜在的碎片。与旧索引相比,由于叶节点大小增加(假设键不是增量的)以及如果对新包含列的更新增加长度,碎片将略微增加。

考虑对这个任务使用 CREATE INDEX...WITH DROP EXISTING。这将避免删除旧索引并避免排序,利用现有索引键序列进行重建:

CREATE INDEX IX_NC_TableName_ColumnName
ON TableName(ColumnName)
INCLUDE(Col1, Col2, Col3, Col4)
WITH(DROP_EXISTING = ON);

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 2019-03-22
    • 2018-02-17
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多