打造百万级别数据库

1,262 阅读2分钟

最近想全解了解 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()

最后,我只用了一分钟就打造完我的百万级别数据库。撒花!!!