MYSQL存储过程删除大量数据

当删除数据量过大事,为了防止删除过程锁表,影响正常程序。当删除数据超过100w,我们使用存储过程,分批删除数据。

删除方法一:(删除条件不是自增主键时推荐)

DROP PROCEDURE IF EXISTS SompDeleteProc1

DELIMITER $$
CREATE DEFINER = CURRENT_USER PROCEDURE SompDeleteProc1()
BEGIN
DECLARE num int;
--REPEAT循环语句开始
REPEAT
DELETE from review_addreview where suppliercode<'10051645' LIMIT 3000;
set num=ROW_COUNT();
COMMIT;  
--UTILE后面条件成立就退出循环
UNTIL num=0
END REPEAT;
END $$
DELIMITER ;

CALL SompDeleteProc1;

删除方法二:删除条件为自增主键时,这个效率更高

DELIMITER $$
CREATE DEFINER = CURRENT_USER  PROCEDURE McmpDeleteProc1()
BEGIN
    declare minV BIGINT ;
    declare maxV BIGINT ;
    select apply_id into minV from t_cm_apply1 order by apply_id  limit 1;
    select apply_id into maxV from t_cm_apply1 order by apply_id desc limit 1;
    set maxV = maxV + 10000;
    while minV <= maxV  
    do  
        delete from    t_cm_apply1  where  SUPPLIER_CODE >=70885853 AND SUPPLIER_CODE <=70898813 and  apply_id >=minV and  apply_id < minV + 5000 ;  
        COMMIT;  
       set minV = minV + 5000;  
    end while;
END $$
DELIMITER ;


删除数据后清磁盘: alter table      t_batch_import_pricewarn      engine = innodb ;

猜你喜欢

转载自blog.csdn.net/qq_37570710/article/details/103489853
今日推荐