MYSQL 循环提交的优化测试

通过对比三种不同的存储过程实现方式,发现使用单次事务提交的load3方法比循环提交的load1和load2方法在执行大量数据插入时,性能提高了数十倍。这是因为每次提交都需要写重做日志,而单次事务可以减少这一开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了别人的一篇文件,说的是循环提交,性能提高很多,我就用文章的存储过程测试了一下,果然用时很少

create table t1 (a int ,b char(100));

创建load1
delimiter //
create procedure load1 (count INT UNSIGNED)
begin
declare s int unsigned default 1;
declare c char(80) default repeat('a',80);
while s <= count do
insert into t1 select null,c;
commit;
set s = s+1;
end while;
end //
delimiter ;


创建load2
delimiter //
create procedure load2 (count int unsigned)
begin
declare s int unsigned default 1;
declare c char(80) default repeat('a',80);
while s <= count do
insert into t1 select null,c;
set s = s+1;
end while;
end //
delimiter ;

创建load3
delimiter //
create procedure load3(count int unsigned)
begin
declare s int unsigned default 1;
declare c char(80) default repeat('a',80);
start transaction;
while s <= count do
insert into t1 select null,c;
set s = s+1;
end while;
commit;
end //
delimiter ;


mysql> create database db1;
Query OK, 1 row affected (0.00 sec)

mysql> use db1
Database changed
mysql> create table t1 (a int ,b char(100));
Query OK, 0 rows affected (0.03 sec)

mysql> call load1(20000);
Query OK, 0 rows affected (1 min 22.25 sec)
mysql> truncate table t1;
Query OK, 0 rows affected (0.02 sec)

mysql> truncate table t1;
Query OK, 0 rows affected (0.02 sec)

mysql> call load2(20000);
Query OK, 1 row affected (1 min 21.53 sec)

mysql>  truncate table t1;
Query OK, 0 rows affected (0.02 sec)

mysql> call load3(20000);
Query OK, 0 rows affected (2.39 sec)

显然,load3 方法要快的多,这是因为每一次提交都要写一次重做日志,存储过程 load1 和 load2 
实际写了 20000 次重做日志文件,而对于存储过程 load3 来说,实际只写了一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值