前言:
由于新型冠狀病毒影響,博主(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】
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4137.html
標籤:SQL Server
