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

相關文章
相關標籤/搜索