SQL Server 是否可以从表的列中删除非聚集索引?

xnifntxz  于 2022-12-22  发布在  其他
关注(0)|答案(3)|浏览(301)

我只想知道是否可以从表的列中删除非聚集索引。我最近在一列上创建了所需的非聚集索引。因此,我只想删除此索引,以便可以获取向表添加索引之前和之后的执行计划。我想通过查询删除它。是否可以?

lhcgjxsq

lhcgjxsq1#

有一个DROP INDEX命令;

DROP INDEX table_name.index_name

应该可以。
也可以禁用索引,其优缺点在here中讨论过,但本文的有效点是:
禁用索引和删除索引之间的最大区别在于是否持久保存元数据和统计信息。如果禁用,则持久保存。如果删除,则不持久保存。请确保在执行任一操作之前仔细权衡您的选择,并始终有办法重新创建可用的索引。
因此,在这种情况下,您可能希望简单地禁用索引,收集统计信息,然后通过以下方式重新启用索引:

禁用:

ALTER INDEX index_name ON schema.table_name DISABLE

启用:

ALTER INDEX index_name ON schema.table_name REBUILD
zzlelutf

zzlelutf2#

USE [Database_Name_here]
GO
DROP INDEX [<The_Index_Name>]
ON [Schema_Name].[<Table_Name>]
GO
  • 运行后,您可以在对象资源管理器树中交叉检查,转到左侧对象资源管理器中的表,然后检查索引文件夹,删除后该索引将不可见。*
ubby3x7f

ubby3x7f3#

这样会更好,首先检查是否存在并删除它是的。

USE [Database_Name_here]
GO
IF EXISTS(SELECT * FROM sys.indexes WHERE name = '<The_Index_Name>' AND object_id = OBJECT_ID('[Database_Name_here].[Schema_Name].[<Table_Name>]'))
BEGIN
    DROP INDEX [<The_Index_Name>]
ON [dbo].[<Table_Name>]
END

GO

相关问题