---恢复内容开始---
最近仔细研究了一下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是表明。
删除成功后再执行一次查询。
可以看到有慢了许多。