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

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

问题场景:
  在大批量删除数据库表部分数据、archive数据的时候,若是数据库表的非汇集索引比较多比较大,会严重影响删除性能,这时候就须要采起适当措施,避免删除数据过程当中不断去维护非汇集索引,能够先临时删除/禁用一些非汇集索引,再进行数据删除操做,提升删除性能,删除完数据后,再从新建立加回/启用这部分非汇集索引。数据库

解决方案1:
先备份非汇集索引,而后删除非汇集索引,最后从新建立非汇集索引。删除和建立索引脚本以下:编程

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

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

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

解决方案2(推荐):
先禁用非汇集索引,最后从新启用非汇集索引。禁用和启用索引脚本以下:性能

--临时禁用非汇集索引
alter index [NonClusteredIndex-502219048] on [dbo].[table1] disable

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

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

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

【尊重做者劳动成果,转载请注明博文来源:http://www.javashuo.com/article/p-zlxdxmtc-gw.htmlspa

相关文章
相关标签/搜索