数据库访问量大,速度已经很慢了。在这种情况下,想对一个正在使用着的大表的历史数据删除。这种情况应该如何删除这个表的数据,有什么好的方法尽量不会影响正常业务

解决方案 »

  1.   

    有分区可以删除历史分区。没分区就分批delete吧
      

  2.   

    分批删除, 一次删除 300、500 ,删除后马上 commit ;
      

  3.   


    declare @n int=1;
    while (@n<100)
    begin
    SET ROWCOUNT 100000;
    BEGIN TRAN
    DELETE FROM  t1;
        COMMIT
    IF @@ROWCOUNT = 0
    BREAK;
    SET ROWCOUNT 0;
    set @n=@n+1
    waitfor delay '00:00:02'    ;
    end循环删除,每次删除100000。
    你可以先看看每次删除多少不会引起表锁,改下SET ROWCOUNT 后面的数。
      

  4.   

    没分区批量delete