Mysql 慢SQL调优-索引详解面试题
前言
最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。
如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!
一、慢查询日志设置
1、开启慢查询日志,设置超过几秒为慢SQL语句,抓取慢SQL语句;
(阿里的ARMS监控平台直接就能查询到慢SQL)
show variables like "%query%"
- 1)参数log_queries_not_using_indexes :表示如果运行的SQL语句没有使用到索引,是否也被当作慢查询语句记录到慢查询日志中,OFF表示不记录,ON表示记录
- 2)参数long_query_time :表示“多长时间的查询”被认定为“慢查询”,默认值为10秒,表示超过10秒的查询被认定为慢查询
- 3)参数 slow_query_log :表示是否开启慢查询日志。开启:“> set global slow_query_log=on”关闭:“> set global slow_query_log=off ”
- 4)参数slow_query_log_file:指定慢查询日志存储于哪个日志文件中,默认的慢查询日志文件名为“主机名-slow.log”,慢查询日志的位置为datadir参数所对应的目录位置。
慢查询日志中给出了账号、主机、运行时间、锁定时间、返回行等信息,当日志文件越来越大,通过vi或cat命令不能很直观地查看日志,这时就可以使用MySQL内置的mysqldumpslow命令来查询:
mysqldumpslow -s r -t 5 /data/mysql/mysql_slow.log
查询返回记录集最多的5个慢查询SQL。
二、explain查看执行计划
2、通过explain查看SQL执行计划,重点关注type、key、rows、extra指标;创建索引并调整语句,