前言: 由於新型冠狀病毒影響,博主(zhang502219048)在2020年1月份從廣東廣州工作地回到廣東揭陽產業轉移工業園磐東街道(鎮里有陽美亞洲玉都、五金之鄉,素以“金玉”聞名)老家後,還沒過去廣州現場復工,年後又延遲復工 + 居家辦公,並且在老家對原來房子進行簡單裝修,1月份到3月份沒時間去 ...
前言:
由於新型冠狀病毒影響,博主(zhang502219048)在2020年1月份從廣東廣州工作地回到廣東揭陽產業轉移工業園磐東街道(鎮里有陽美亞洲玉都、五金之鄉,素以“金玉”聞名)老家後,還沒過去廣州現場復工,年後又延遲復工 + 居家辦公,並且在老家對原來房子進行簡單裝修,1月份到3月份沒時間去寫下博文。今天就來對居家辦公期間摸索到的一個資料庫編程技巧進行整理並分享給大家。
問題場景:
在大批量刪除資料庫表部分數據、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的話,只需要指定具體的表名和索引名稱,而不需要具體的欄位,相對來說比較簡便快捷,簡化了編程。
【尊重作者勞動成果,轉載請註明博文來源:https://www.cnblogs.com/zhang502219048/p/12730451.html】