MySQL存储过程分批COMMIT
海量数据分批提交
DROP PROCEDURE IF EXISTS proc_role;
CREATE PROCEDURE proc_role ( )
BEGIN
DECLARE done int DEFAULT FALSE;
DECLARE v_cnt int DEFAULT 0;
DECLARE v_rolename varchar(32);
DECLARE cur1 CURSOR for SELECT vrolename from tt;
/* 定义退出循环规则 */
DECLARE CONTINUE HANDLER for not found set done=TRUE;
/* 开启事务,即关闭MySQL自动提交 */
SET autocommit = 0;
OPEN cur1;
read_loop:loop
FETCH cur1 INTO v_rolename;
IF
done THEN
LEAVE read_loop;
END IF;
/* 开始计数 */
SET v_cnt = v_cnt + 1;
insert into role(rolename) VALUES(v_rolename);
/* 下面是每1000条记录提交一次,可以根据业务情况调整 */
if
mod(v_cnt,1000)=0 then
/* SELECT SLEEP(5); 断点检测*/
commit; END if;
END LOOP;
CLOSE cur1;
/* 因为整除1000之后还有最后一批数据未提交,所以再进行一次COMMIT */
COMMIT;
END;
各位技术牛好!这个存储过程虽然实现了分批提交,但是感觉效率有些低,是不是还有优化的空间,望不吝赐教,谢谢!
探讨了使用MySQL存储过程实现海量数据分批提交的方法,通过每1000条记录进行一次COMMIT操作,以减少锁等待时间和提高写入效率。但作者认为仍有优化空间,邀请社区共同讨论。

1571

被折叠的 条评论
为什么被折叠?



