当删除数据量过大事,为了防止删除过程锁表,影响正常程序。当删除数据超过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 ;