MYSQL优化-慢查询

慢查询有什么用?

我们执行一个SQL语句的时候,如果开启了慢查询,这个时候整个的执行过程就会被记录下来, 我们可以根据这个结果来分析我们的表结构以及查询语句

如何开启慢查询?

linux

在mysql的配置文件my.cnf中增加:

1
2
3
log-slow-queries=/var/lib/mysql/slowquery.log #慢查询日志存放位置
long_query_time=2 #查询超过2秒才进行记录
log-queries-not-using-indexes #记录下没有使用索引的查询

windows

在my.ini的[mysqld]下添加

1
2
log-slow-queries =E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他参数如上)

测试和查看

1
2
use moretv
select * from mtv_artical

如果使用vim查看slowquery.log文件, 格式不好
mysql有自带的工具:mysqldumpslow
mysqldumpslow对日志文件进行了分类汇总,显示汇总后摘要结果

1
mysqldumpslow slowquery.log

mysqldumpslow指令

1
/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log

这会输出记录次数最多的10条SQL语句,其中:

  • -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
  • -t, 是top n的意思,即为返回前面多少条的数据;
  • -g, 后边可以写一个正则匹配模式,大小写不敏感的;

比如

1
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log

得到返回记录集最多的10个查询。

1
/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log

得到按照时间排序的前10条里面含有左连接的查询语句。