背景:
有个需求,需要向数据库插入300万数据,测试一个性能
这里使用存储过程来循环插入
先看第一次的插入,非常慢,十分钟只写入十几万条
sql
delimiter $$
create procedure auto_insert1()
BEGIN
declare i int default 1;
while(i<3000000)do
insert into s1 values(i,'chens','male',concat('chens',i,'@qqcom'));
set i=i+1;
select concat('chens',i,'_ok');
end while;
END$$
delimiter ;
再来看下面的,利用事务批量提交,30秒钟全部插入完成
sql
DELIMITER $$
CREATE PROCEDURE auto_insert1()
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE batch_size INT DEFAULT 10000;
DECLARE max_i INT DEFAULT 3000000;
SET autocommit = 0;
START TRANSACTION;
WHILE i < max_i DO
INSERT INTO s1 VALUES(i, 'chens', 'male', CONCAT('chens', i, '@qqcom'));
SET i = i + 1;
IF i % batch_size = 0 THEN
COMMIT;
START TRANSACTION;
END IF;
END WHILE;
COMMIT;
SET autocommit = 1;
END$$
DELIMITER ;