慢查询有什么用?
我们执行一个SQL语句的时候,如果开启了慢查询,这个时候整个的执行过程就会被记录下来, 我们可以根据这个结果来分析我们的表结构以及查询语句
如何开启慢查询?
linux
在mysql的配置文件my.cnf中增加:1
2
3log-slow-queries=/var/lib/mysql/slowquery.log #慢查询日志存放位置
long_query_time=2 #查询超过2秒才进行记录
log-queries-not-using-indexes #记录下没有使用索引的查询
windows
在my.ini的[mysqld]下添加1
2log-slow-queries =E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他参数如上)
测试和查看
1 | use moretv |
如果使用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条里面含有左连接的查询语句。