MYSQL 循環提交的優化測試

今天看了別人的一篇文件,說的是循環提交,性能提高很多,我就用文章的存儲過程測試了一下,果然用時很少

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 來說,實際只寫了一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章