超過100萬以上數據 刪除的時候 會非常慢且產生大量日志文件 最大的問題是內存爆表 導致得多次重啟服務才能刪除整個庫 暫時提出初步優化方案
1.設置日志為簡單模式,處理完后恢復
ALTER DATABASE tcgpsdb SET RECOVERY SIMPLE --簡單模式
ALTER DATABASE tcgpsdb SET RECOVERY FULL --還原為完全模式
2.delete的時候 會造成整表鎖定,所以采用分批刪除
@onecount 這里設置為一百萬一次,可以自由調節
declare @onecount int set @onecount=1000000 print getdate() while 1=1 begin delete top(@onecount) from XX where FSendTime<'2019-1-01' IF (@@rowcount<@onecount) BREAK; print getdate() end
刪除一千多萬條數據耗時 注意:搜索時間字段有加索引
02 1 2019 11:25AM (1000000 行受影響) 02 1 2019 11:26AM (1000000 行受影響) 02 1 2019 11:27AM (1000000 行受影響) 02 1 2019 11:27AM (1000000 行受影響) 02 1 2019 11:28AM (1000000 行受影響) 02 1 2019 11:28AM (1000000 行受影響) 02 1 2019 11:29AM (1000000 行受影響) 02 1 2019 11:29AM (1000000 行受影響) 02 1 2019 11:30AM (1000000 行受影響) 02 1 2019 11:31AM (1000000 行受影響) 02 1 2019 11:31AM (636657 行受影響)
另外還有 插入到新表然后 drop 老表 把新表改為原來表名 這種涉及停機 所以暫不考慮
以上方案還是不夠理想,這里拋磚迎玉 希望有更好的同學能給出 更快速 更省內存的解決方案