创建一个存储过程
| create procedure insert_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; insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand()); until i = max_num end repeat; commit; end #调用刚刚写好的函数, 1800000条记录,从100001号开始 call insert_emp(100001,4000000); |
这时我们如果出现一条语句执行时间超过1秒中,就会统计到.
如果把慢查询的sql记录到我们的一个日志中
在默认情况下,低版本的mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询才可以
binmysqld.exe - -safe-mode - -slow-query-log [mysql5.5 可以在my.ini指定]
binmysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]
该慢查询日志会放在data目录下[在mysql5.0这个版本中时放在 mysql安装目录/data/下],在 mysql5.5.19下是需要查看
my.ini 的 datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/“来确定.
在mysql5.6中,默认是启动记录慢查询的,my.ini的所在目录为:C:ProgramDataMySQLMySQL Server 5.6,其中有一个配置项
slow-query-log=1
针对 mysql5.5启动慢查询有两种方法
binmysqld.exe - -safe-mode - -slow-query-log
也可以在my.ini 文件中配置:
| [mysqld] # The TCP/IP Port the MySQL Server will listen on port=3306 slow-query-log |
通过慢查询日志定位执行效率较低的SQL语句。慢查询日志记录了所有执行时间超过long_query_time所设置的SQL语句。
| show variables like 'long_query_time'; set long_query_time=2; |
为dept表添加数据
| desc dept; ALTER table dept add id int PRIMARY key auto_increment; CREATE PRIMARY KEY on dept(id); create INDEX idx_dptno_dptname on dept(deptno,dname); INSERT into dept(deptno,dname,loc) values(1,'研发部','康和盛大厦5楼501'); INSERT into dept(deptno,dname,loc) values(2,'产品部','康和盛大厦5楼502'); INSERT into dept(deptno,dname,loc) values(3,'财务部','康和盛大厦5楼503');UPDATE emp set deptno=1 where empno=100002; |
****测试语句***[对emp表的记录可以为3600000 ,效果很明显慢]
| select * from emp where empno=(select empno from emp where ename='研发部') |
如果带上order by e.empno 速度就会更慢,有时会到1min多.
测试语句
| select * from emp e,dept d where e.empno=100002 and e.deptno=d.deptno; |
查看慢查询日志:默认为数据目录data中的host-name-slow.log。低版本的mysql需要通过在开启mysql时使用- -log-slow-queries[=file_name]来配置










