目录
一、整体思路
1.根据慢日志定位慢查询sql
2.使用explain等工具分析sql
3.修改sql或者尽量让sql走索引
二、具体部分
1.怎么查询慢日志
(1)show variables like '%quer%',查询变量
long_query_time:慢日志阈值,超过才会被记录
slow_query_log:打开/关闭慢日志
slow_query_log_file:慢日志记录的位置
(2)show status like '%slow_queries%' , 慢查询的数量
(3)set global slow_query_log = on ; 打开慢查询
(4)set global long_query_time = 1 ;设置慢查询的时间阈值为:1s
->设置完之后需要重新连接数据库,才能够生效
(5)假设下面这条查询产生慢查询(2000000条数据)
select count(id) from person_info_large order by name desc;
花费3.3s
(6)再次执行show status like '%slow_queries%'
产生了一条慢日志
(7)通过终端去查看该日志
打开之后,就可以看到该查询被记录在慢日志文件里
还可以看到,诸如Query_time(花费时间)。
2.使用explain分析
在分析查询性能的时候,
关键字一般放在select的前面,用于描述maysql如何执行操作,已经mysql成功返回需要执行的函数,他可以帮我们分析select语句。帮助我们查找到查询小效率低下的原因,让查询优化器更好的工作
(1)查询:
id标明sql的执行顺序(越大越先执行)
(2)type字段和Extra字段
type:
表示mysql找到数据行的方式
index/all表示全表扫描,是最慢的,每次看到这两个要特别注意
extra:
可以获取到更为详细的信息:
出现以下两项表示mysql无法使用索引,应尽可能优化
(3)范例中的这两个字段
都是需要优化的
3.对sql进行调优
调优方式:修改sql或者尽量让sql走索引
方法一:修改sql语句
(1)分析sql语句和数据库表的设计
发现account是走索引的,而name是没有的
(2)将查询修改为查account
(3)再次执行explain
已经走了索引
发现字段中多了一个key:
表明走了key的索引
(4)检验
再次执行:
查询慢日志:数量为2
使用终端打开慢日志记录的位置
发现快了2s多,提高了性能
方法二:加索引
(1)给name加上索引
(2)再次执行查询,并查看字段信息
(3)执行select并进入终端
可见,性能得到了提升
三、mysql查询优化器会使用哪种方式查询
这条语句走的是非主键,并且比强制使用主键查询还要快。