百萬級別數據表,進行有條件的數據刪除,這個時候采用delete from的一次性刪除的方法是很不明智的:
1、delete操作會被完整記錄到日志里,它需要大量空間和時間
2、如果刪除中間發生中斷,一切刪除會回滾(在一個事務里)
3、同時刪除多行,記錄上的鎖也許會被提升為排它表鎖,從而阻礙操作完成之前有對這個表的操作(有時候會妨礙正常的業務)所以一般采取分批刪除的方法
所以,通過分批次地刪除數據可以大大提升刪除效率,縮短刪除時間:
declare @perCount int; set @perCount = 6000; while 1=1 begin delete top(@perCount) from 表 where CrtDate < '2020-12-23'; if(@@rowcount<@perCount) break; end
