当前位置: 代码迷 >> Sql Server >> 怎么快速删除大批量数据(带条件删除)
  详细解决方案

怎么快速删除大批量数据(带条件删除)

热度:26   发布时间:2016-04-27 12:00:55.0
如何快速删除大批量数据(带条件删除)
原表五千万级以上,每天需要删除最近30天内数据(300万-500万)

今天刚试了下,delete到现在已经2个小时了,还没完。。。。



------解决方案--------------------
贴一个个人之前的总结。

SQL code
大批量DELETE操作单个事物中删除大量数据有几个缺点:1、    DELETE语句被完整的记录到日志,他要求在事务日志中有足够的空间以完成整个事物。2、    再删除操作期间(该操作肯呢过会花费很长时间),从最早打开的事务到当前时间点的所有日志都不会被重写。而且,如果该事务因某种原因被中断,这之前噶生的所有操作都将被回滚,这也会花费一些时间。3、    当同时删除多行时,SQL Server可能会把被删除行上的单一锁提升为排它表锁,以阻止DELETE完成之前对目标表的读写操作。所以把一个大DELETE事务差分成多个小事务来处理,最好是用一个等待,这样可以日志回收,来释放系统资源。虽然这样可能会比一个delete 语句执行时间要长,但是对整个系统影响较小。实例:BEGIN TRY;DECLARE @row_count INT,@wait_for_delay CHAR(8)='00:00:10'WHILE 1 = 1BEGIN;    BEGIN TRAN;    DELETE TOP(5000) FROM tb WHERE create_Date<'2012-01-01'    SET @row_count=@@ROWCOUNT;    IF XACT_STATE()= 1         COMMIT;    IF @row_count<5000    BEGIN;        BREAK;    END;    ELSE        WAITFOR DELAY @wait_for_delay;END;END TRYBEGIN CATCH    IF XACT_STATE()= 1    BEGIN        ROLLBACK TRAN;    END;END CATCH;
  相关解决方案