高性能的MySQL(2)慢查询2014-06-23一、剖析MySQL查询1、首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具。a、开始mysql的慢查询,修改my.conf
[mysqld]#开启慢查询log_slow_queries = ON#指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.loglog-slow-queries = /usr/local/mysq/var/slowquery.log#记录超过的时间,默认为10slong_query_time = 1#log下来没有使用索引的query,可以根据情况决定是否开启log-queries-not-using-indexes#执行速度较慢的管理命令(比如OPTIMEZE TABLE)也会被记录log-slow-admin-statements
b、查看当前信息

c、写存储过程,生成一个500W记录的表
#生成随机字符串函数,在存储过程中调用delimiter $$create function rand_string(n int) returns varchar(255)begindeclare chars_str varchar(100) default "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";declare return_str varchar(255) default "";declare i int default 0;while i<n doset return_str = concat(return_str,substring(chars_str,floor(1+rand()*52),1));set i = i + 1;end while;return return_str;end$$delimiter ;#生成随机数字,在存储过程中调用delimiter $$create function rand_num() returns int(5)begindeclare i int default 0;set i = floor(10+rand()*500);return i;end$$delimiter ;#定义存储过程delimiter $$create procedure insert_emp(start int(10),max_num int(10))begindeclare i int default 0;set autocommit = 0;repeatset i = i+1;insert into emp values((start+i),rand_string(6),"SALESMAN",0001,2000,400,rand_num(),curdate());until i = max_numend repeat;end$$