存儲過程寫入大批量數據,用於測試mysql查詢優化


---恢復內容開始---

最近仔細研究了一下mysql優化索引的知識,當然開始玩之前還是要插入大量數據的

下面是表結構

Ps:這個插入是我看韓老師的mysq優化章節

 1 #創建表EMP雇員
 2 CREATE TABLE emp
 3 (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*編號*/
 4 ename VARCHAR(20) NOT NULL DEFAULT "",/*名字*/
 5 job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
 6 mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上級編號*/
 7 hiredate DATE NOT NULL,/*入職時間*/
 8 sal DECIMAL(7,2) NOT NULL,/*薪水*/
 9 comm DECIMAL(7,2),/*紅利*/
10 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0/*部門編號*/
11 )ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

然后我們創建存儲過程

先:delimiter $$

先創建隨機部門號函數

#這里我們有自定了一個函數,返回一個隨機部門號
create function rand_num()
returns int(5)
begin
declare i int default 0;
set i = floor(10+rand()*500);
return i;
end $$

然后我們創建存儲函數

#隨機添加雇員 max_num條,雇員編號從 start
#start是雇員編號開始,max_num准備添加多少雇員
create procedure inset_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;
#set autocommit=0 把autocommit設置成0  含義:不要自動提交
set autocommit = 0;
repeat
set i = i + 1;
#通過前面寫的函數隨機產生字符串和部門編號,然后加入帶emp表
insert into emp values ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
until i = max_num
end repeat;
#commit 整體提交所有spl語句,提高效率
commit;
end $$

最后執行inset_emp插入數據

call inset_emp(100001,8000000)$$

最后等待執行完畢。一般時間和機器配置有關,我是用的windows i3cpu 4分鍾。

最后我們試一下查詢速度。

【這里我之前生成數據的時候,價格id主鍵,就不刪除id了,咱們直接查詢ename】

然后我們執行隨機查詢

發現時間都是很久,然后我們為字段ename添加索引

這個執行可能需要幾分鍾時間,因為他要在數據根目錄創建一個索引文件

MYI結尾文件是MYD結尾文件大小的約三分之一。

添加完成后,我們再執一次此查詢。

 

 可以看出,速度提升了很多很多。

ps:刪除索引的命令是 ceshi_name是索引名,emp是表明。

刪除成功后再執行一次查詢。

可以看到有慢了許多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM