2020年2月23日 星期日

MS SQL刪除超大型資料

工作中有时候需要清理历史数据的时候,往往数据量达到了几百万.这个时候采用一次性删除的方法是很不明智的: a.delete操作会被完整记录到日志里,它需要大量空间和时间; b.如果删除中间发生中断,一切删除会回滚(在一个事务里); c.同时删除多行,记录上的锁也许会被提升为排它表锁,从而阻碍操作完成之前有对这个表的操作(有时候会妨碍正常的业务) 所以一般采取分批删除的方法. sql2000:通过set rowcount 来控制每次删除的记录数 SET ROWCOUNT 5000; WHILE 1 = 1 BEGIN DELETE FROM dbo.LargeOrders WHERE OrderDate < '19970101'; IF @@rowcount < 5000 BREAK; END SET ROWCOUNT 0; sql2005:通过TOP的方法 WHILE 1 = 1 BEGIN DELETE TOP(5000) FROM dbo.LargeOrders WHERE OrderDate < '19970101'; IF @@rowcount < 5000 BREAK; END -----------------

沒有留言:

張貼留言