暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL大表的数据怎么快速的删除 ?

原创 鸿惊九天 2022-12-01
703
MySQL大表的数据怎么快速的删除,而不会造成锁等待,影响线上业务?
用下列存储过程进行删除大表数据:每删除1000条事物就提交一次,循环操作直至删除完毕(行锁范围变小)
DELIMITER $$
USER BIGDB
DROP PROCEDURE IF EXISTS BIG_table_delete_1k$$
CREATE PROCEDURE BIG_table_delete_1k(IN v_UserId INT)
BEGIN 
del_1k:LOOP 
delete from BIGDB.BIGTABLE where UserId=v_UserId limit 1000;
select row_count() into @count;
IF @count=0 THEN 
  select CONCAT('BIGDB.BIGTABLE UserId=',v_UserId,'is',@count,'rows.') as BIGTABLE_delete_finish;
LEAVE del_1k;
END IF;
  select sleep(1);
END LOOP del_1k;
END$$;
DELIMITER;

=============================================
DELIMITER $$
USER test
DROP PROCEDURE IF EXISTS test_delete_1k$$
CREATE PROCEDURE test_delete_1k(IN v_Id INT)
BEGIN 
del_1k:LOOP 
delete from test.test where Id=v_Id limit 1000;
select row_count() into @count;
IF @count=0 THEN 
  select CONCAT('test.test Id=',v_Id,'is',@count,'rows.') as BIGTABLE_delete_finish;
LEAVE del_1k;
END IF;
  select sleep(1);
END LOOP del_1k;
END$$;
DELIMITER;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论