最近想全解了解 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()
最後,我只用了一分鐘
就打造完我的百萬級別數據庫。撒花!!!