超過100萬以上數據 刪除的時候 會很是慢且產生大量日誌文件 最大的問題是內存爆表 致使得屢次重啓服務才能刪除整個庫 暫時提出初步優化方案優化
1.設置日誌爲簡單模式,處理完後恢復spa
ALTER DATABASE tcgpsdb SET RECOVERY SIMPLE --簡單模式
ALTER DATABASE tcgpsdb SET RECOVERY FULL --還原爲徹底模式日誌
2.delete的時候 會形成整表鎖定,因此採用分批刪除code
@onecount 這裏設置爲一百萬一次,能夠自由調節blog
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 老表 把新表改成原來表名 這種涉及停機 因此暫不考慮內存
以上方案仍是不夠理想,這裏拋磚迎玉 但願有更好的同窗能給出 更快速 更省內存的解決方案get