0
点赞
收藏
分享

微信扫一扫

使用存储过程实现千万级的大批量数据插入

color_小浣熊 2022-02-27 阅读 48

t_user表

在这里插入图片描述

创建存储过程 insert_user(IN c int(10));

CREATE PROCEDURE insert_user(IN c int(10))
BEGIN
	DECLARE i INT DEFAULT 0 ;
	REPEAT
	SET i = i + 1 ; 
INSERT INTO t_user (`name`, `addr`)VALUES("aaaaaaa", "bbbbbbb") ; 
UNTIL i = c END REPEAT; 
END

调用存储过程 Call pro_name(args);

-- MySQL默认为自动提交
SHOW VARIABLES LIKE '%autocommit%';
-- 设置当前会话不自动提交
SET SESSION autocommit=0; 
SHOW VARIABLES LIKE '%autocommit%';
-- 新插入八千万行数据
CALL insert_user(80000000);
-- 提交
COMMIT;
-- 设置当前会话自动提交
SET SESSION autocommit=1;
SHOW VARIABLES LIKE '%autocommit%';

每插入10000000行数据要5 minutes 左右。
所以插入80000000行记录需要 40 minutes 左右。此次执行实际用了60 minutes。

以下为上述执行过程的统计信息

[SQL]-- MySQL默认为自动提交
SHOW VARIABLES LIKE '%autocommit%';
受影响的行: 0
时间: 0.001s

[SQL]
-- 设置当前会话不自动提交
SET SESSION autocommit=0;
受影响的行: 0
时间: 0.000s

[SQL] 
SHOW VARIABLES LIKE '%autocommit%';
受影响的行: 0
时间: 0.001s

[SQL]
-- 新插入八千万行数据
CALL insert_user(80000000);
受影响的行: 1
时间: 3632.734s

[SQL]
-- 提交
COMMIT;
受影响的行: 0
时间: 0.295s

[SQL]
-- 设置当前会话自动提交
SET SESSION autocommit=1;
受影响的行: 0
时间: 0.000s

[SQL]
SHOW VARIABLES LIKE '%autocommit%';
受影响的行: 0
时间: 0.002s
举报

相关推荐

0 条评论