【问题标题】:Add column to the Index using Include Clause without dropping the index in SQL Server使用包含子句将列添加到索引而不删除 SQL Server 中的索引
【发布时间】:2015-08-25 20:45:30
【问题描述】:

我想以以下格式向现有索引引入一列。

现有索引:

Create index idx_indexname on tablename(id)

我的新索引是

Alter index idx_indexname on tablename(id) include (column1)

我想以这种方式添加大约 300 个索引的列。请提出任何动态方法。

注意:我的大多数索引都属于唯一(非聚集)/主键(聚集索引)

【问题讨论】:

  • 是否包含列对于所有索引都相同
  • 是的,大部分索引都是一样的
  • 您不能将包含的列添加到聚集索引中,因为无论如何都会包含该列(数据行的一部分,即聚集索引叶节点)。使用CREATE INDEX...WITH(DROP_EXISTING=ON) INCLUDE(Column1) 无需排序即可重建现有的非聚集索引。
  • 是否要将列添加到所有表的所有现有索引?

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

首先,从列表中删除所有聚集索引。它们已经是表本身,因此所有列都自动包含在内。 至于其余的,您必须删除索引并重新创建它。您可以使用 drop_existing 选项,但它实际上会使索引脱机。 最好创建新的索引。然后去掉旧的。并使用 sp_rename 重命名以将新索引设置为原始索引名称。

【讨论】:

  • 非常感谢阿米尔
【解决方案2】:

您可以删除并重新创建索引,但不能更改索引以添加更多列。

alter index 仅用于设置索引的某些属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多