如果我们在优化过程中能找到那些sql的执行拖慢了速度,就能有针对性的去优化的定的sql语句,做到事半功倍。

先来看几个跟慢查询相关的指令及配置

mysql服务端有几个跟慢查询相关的配置:

slow_query_log:是否记录慢查询日志

long_query_time:执行多长时间的sql语句算慢(不一定是查询),默认10s

log_slow_queries:慢查询日志文件位置(5.6及以上版本mysql使用slow-query-log-file参数)

 



查看慢查询时间



show variables like 'long_query_time';



set long_query_time = 1;



在[mysqld]标签下配置这三项

mysql中地理坐标应该用什么类型设计_perl


 配置完重启服务


显示慢查询次数


show status like 'slow_queries';


mysql中地理坐标应该用什么类型设计_mysql_02


 

接下来构建几个大表,用于测试,测试脚本见附件[sql.txt]


执行脚本时最好将脚本中的注释去掉创建函数时可能会报如下错误

mysql中地理坐标应该用什么类型设计_优化_03


在my.cnf中修改变量

mysql中地理坐标应该用什么类型设计_perl_04


 配置完重启

执行完脚本后,emp表中应该有4000000记录。


执行对表emp的查询

mysql中地理坐标应该用什么类型设计_慢查询_05


 可以看到,慢查询次数在增加。

仅仅知道慢查询次数还不够,需要定位到具体哪条sql执行慢。在log_slow_queries指定的位置,可以看到慢查询的日志,可以使用文本编辑器查看,也可以试用mysql自带的命令行工具mysqldumpslow查看。使用mysqldumpslow需要安装Perl模块,如果服务器还没安装Perl,需要先安装。如果能直接上网,那么可以直接使用yum install perl来安装,如果是在本地虚拟机,可以配置本地yum源,rhel下,将镜像文件加载到虚拟机,然后


cd /mnt/
mkdir cdrom
mount /dev/cdrom /mnt/cdrom/

cd /etc/yum.repos.d/
cp rhel-source.repo rhel-source.repo.bak
vi rhel-source.repo


mysql中地理坐标应该用什么类型设计_慢查询_06


 配置yum源的路径为挂在目录,enabled设置为1,保存退出,使用yum list查看配置是否生效,如果配置生效就可以安装Perl了。安装完,使用perl --version查看perl是否安装成功。

perl安装好后就可以使用mysqldumpslow来查看mysql的慢查询日志。


以下是mysqldumpslow的帮助

mysql中地理坐标应该用什么类型设计_perl_07


 

-s:排序顺序,主要有c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的表示按平均值来排序;


-r:翻转排序顺序;


-t:是top n的意思,即为返回前面多少条的数据;


-g:后边可以写一个正则匹配模式,大小写不敏感的。


查看慢查询日志


mysql中地理坐标应该用什么类型设计_优化_08


 

定位出执行慢的sql语句之后,就能有针对性的去优化了,比如重写sql,添加索引等。