您的位置:首页 > 数据库 > MySQL

高性能的MySQL(2)慢查询

2013-10-10 16:39 253 查看

一、剖析MySQL查询

1、首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具。

a、开始mysql的慢查询,修改my.conf

[mysqld]
#开启慢查询
log_slow_queries = ON
#指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
log-slow-queries = /usr/local/mysq/var/slowquery.log
#记录超过的时间,默认为10s
long_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)
begin
declare chars_str varchar(100) default 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare i int default 0;
while i<n do
set 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)
begin
declare 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))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i+1;
insert into emp values((start+i),rand_string(6),'SALESMAN',0001,2000,400,rand_num(),curdate());
until i = max_num
end repeat;
end
$$
d、查看表数据

e、生成一条慢查询

f、查看日志,会有一条这样的记录

# Time: 131010 16:31:11
# User@Host: root[root] @ localhost []
# Query_time: 1.045439  Lock_time: 0.000057 Rows_sent: 1  Rows_examined: 5000000
SET timestamp=1381393871;
select * from emp where id=1000000;




阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: