继续上一篇文章更新MySQL的查询优化,首先我们要弄清楚的是在查询当中什么是优化的内容:
什么是优化
查询优化
慢查询
一、什么是优化合理安排资源、调整系统参数使MySQL运行更快、更节省资源。
优化是多方面的,包括查询、表设计、服务器等;
原则:减少系统瓶颈期,减少资源占用,增加系统的反应速度
二、查询优化
在优化MySQL的时候,通常需要对数据库进行分析。常见的分析手段有满查询日志,EXPLAIN分析查询,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
2.1 慢查询日志的开启
在配置文件my.cnf或my.ini中在[mysqld]一行下面加入两个配置参数
log-slow-queries=/data/mysqldata/slow-query.log
long_query_time=5
注:log-slow-queries参数为慢查询日志存放的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录;
long_query_time=5中的5表示查询超过五秒才记录;
还可以在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。
2.2 慢查询分析
我们可以通过打开log文件查看得知哪些SQL执行效率低下
从日志中,可以发现查询时间超过5秒的SQL,而小宇5秒的没有出现在此日志中。
如果慢查询日志中记录内容很多的话,可以使用mysqldumpslow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。mysqldumpslow对日志文件进行了分类汇总,显示汇总后摘要结果、
进入log的存放目录,运行
[root@mysql_data]#mysqldumpslow slow-query.log
Reading mysql slow query log from slow-query.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql
select count(N) from t_user;
mysqldumpslow命令
/path/mysqldumpslow -s c -t 10 /database/mysql/slow-query.log
返回的记录数来排序,ac、at、al、ar,表示相应的倒叙
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
例如:
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回记录集最多的10个查询。
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log
得到按照时间排序的前10条里面含有左连接的查询语句。
使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化非常重要的一步。开启慢查询日志后,由于日志记录操作,在一定程度上会占用CPU资源影响mysql的性能,但是可以阶段性开启来定位性能瓶颈。