我只想知道是否可以从表的列中删除非聚集索引。我最近在一列上创建了所需的非聚集索引。因此,我只想删除此索引,以便可以获取向表添加索引之前和之后的执行计划。我想通过查询删除它。是否可以?
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
zzlelutf2#
USE [Database_Name_here] GO DROP INDEX [<The_Index_Name>] ON [Schema_Name].[<Table_Name>] GO
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
3条答案
按热度按时间lhcgjxsq1#
有一个DROP INDEX命令;
应该可以。
也可以禁用索引,其优缺点在here中讨论过,但本文的有效点是:
禁用索引和删除索引之间的最大区别在于是否持久保存元数据和统计信息。如果禁用,则持久保存。如果删除,则不持久保存。请确保在执行任一操作之前仔细权衡您的选择,并始终有办法重新创建可用的索引。
因此,在这种情况下,您可能希望简单地禁用索引,收集统计信息,然后通过以下方式重新启用索引:
禁用:
启用:
zzlelutf2#
ubby3x7f3#
这样会更好,首先检查是否存在并删除它是的。