---恢復內容開始---
最近仔細研究了一下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是表明。
刪除成功后再執行一次查詢。
可以看到有慢了許多。