sql server临时删除/禁用非聚集索引并重新创建加回/启用的简便编程方法研究对比「终于解决」

sql server临时删除/禁用非聚集索引并重新创建加回/启用的简便编程方法研究对比「终于解决」前言: 由于新型冠状病毒影响,博主(zhang502219048)在2020年1月份从广东广州工作地回到广东揭阳产业转移工业园磐东街道(镇里有阳美亚洲玉都、五金之乡,素以“金玉”闻名)老家后,还没过去

sql server临时删除/禁用非聚集索引并重新创建加回/启用的简便编程方法研究对比

前言:
  由于新型冠状病毒影响,博主(zhang502219048)在2020年1月份从广东广州工作地回到广东揭阳产业转移工业园磐东街道(镇里有阳美亚洲玉都、五金之乡,素以“金玉”闻名)老家后,还没过去广州现场复工,年后又延迟复工 + 居家办公,并且在老家对原来房子进行简单装修,1月份到3月份没时间去写下博文。今天就来对居家办公期间摸索到的一个数据库编程技巧进行整理并分享给大家。

问题场景:
  在大批量删除数据库表部分数据、archive数据的时候,如果数据库表的非聚集索引比较多比较大,会严重影响删除性能,这时候就需要采取适当措施,避免删除数据过程中不断去维护非聚集索引,可以先临时删除/禁用一些非聚集索引,再进行数据删除操作,提高删除性能,删除完数据后,再重新创建加回/启用这部分非聚集索引。

解决方案1:
先备份非聚集索引,然后删除非聚集索引,最后重新创建非聚集索引。删除和创建索引脚本如下:

--临时删除非聚集索引
drop index [NonClusteredIndex-502219048] on [dbo].[table1]

--==============
--删除部分表数据
--==============

--重新创建加回非聚集索引
create nonclustered index [NonClusteredIndex-502219048] on [dbo].[table1]
(
    [num] asc
)

代码100分

解决方案2(推荐):
先禁用非聚集索引,最后重新启用非聚集索引。禁用和启用索引脚本如下:

代码100分--临时禁用非聚集索引
alter index [NonClusteredIndex-502219048] on [dbo].[table1] disable

--==============
--删除部分表数据
--==============

--重新启用非聚集索引
alter index [NonClusteredIndex-502219048] on [dbo].[table1] rebuild

结论:
可以看到使用方案1的话,需要备份索引脚本,创建索引脚本也需要指定具体的字段,相对繁琐一些; 
而使用方案2的话,只需要指定具体的表名和索引名称,而不需要具体的字段,相对来说比较简便快捷,简化了编程。

【尊重作者劳动成果,转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/12730451.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8937.html

(0)
上一篇 2023-02-19
下一篇 2023-02-19

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注