最近想全解了解 MySQL
的索引优化知识。当我打开本地数据库的时候,我惊了。只有几条数据默默的停在数据库表里面。因此,我就萌发自己造数据的想法。首先我想到时使用存储过程以及 do while
循环语句。说干就干,当时我三两下就写好了存储过程语句。因为我使用的是 navicat
软件,所以不需要注意 ;
的编译问题,navicat
真香。
DROP PROCEDURE wk;
create PROCEDURE wk()
begin
declare i int DEFAULT 1;
while i<1000000 do
insert into person(id,`name`, `password`,age) values(i,CONCAT('a',i),CONCAT('b',i),i);
set i = i +1;
end while;
end;
然后我就调用该存储过
call wk()
此时内心窃喜,so easy
。谁知,大问题,我调了大半天这个存储过程,看看执行时间飞速流逝,我想要的百万数据迟迟都没有完成。心中一万个草泥马飞过。
后来,慢慢平复心情,默默打开浏览器,输入 小黄网,查询了资料。发现了问题所在,原来 mysql
默认是自动提交事务
的。我们可以自行查看。
show variables like 'autocommit';
当我们在编写带有循环的存储过程,其实程序每执行一次,都会提交一次事务。而我要提交一百万次,不卡成狗也是没天理了。于是,马上修改存储过程,让事务只需要提交一次。
DROP PROCEDURE wk;
create PROCEDURE wk()
begin
declare i int DEFAULT 1;
SET AUTOCOMMIT=0;
while i<1000000 do
insert into person(id,`name`, `password`,age) values(i,CONCAT('a',i),CONCAT('b',i),i);
set i = i +1;
end while;
SET AUTOCOMMIT=1;
end;
调用存储过程
call wk()
最后,我只用了一分钟
就打造完我的百万级别数据库。撒花!!!