如何定位并优化慢查询Sql

目录

 

一、整体思路

二、具体部分

1.怎么查询慢日志

2.使用explain分析

3.对sql进行调优

三、mysql查询优化器会使用哪种方式查询


一、整体思路

1.根据慢日志定位慢查询sql

2.使用explain等工具分析sql

3.修改sql或者尽量让sql走索引

二、具体部分

1.怎么查询慢日志

(1)show variables like '%quer%',查询变量

如何定位并优化慢查询Sql_第1张图片

long_query_time:慢日志阈值,超过才会被记录
slow_query_log:打开/关闭慢日志
slow_query_log_file:慢日志记录的位置

(2)show status like '%slow_queries%'  , 慢查询的数量

如何定位并优化慢查询Sql_第2张图片

(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;

如何定位并优化慢查询Sql_第3张图片

花费3.3s

 

(6)再次执行show status like '%slow_queries%'

产生了一条慢日志

(7)通过终端去查看该日志

如何定位并优化慢查询Sql_第4张图片

如何定位并优化慢查询Sql_第5张图片

打开之后,就可以看到该查询被记录在慢日志文件里

如何定位并优化慢查询Sql_第6张图片

还可以看到,诸如Query_time(花费时间)。

2.使用explain分析

在分析查询性能的时候,

关键字一般放在select的前面,用于描述maysql如何执行操作,已经mysql成功返回需要执行的函数,他可以帮我们分析select语句。帮助我们查找到查询小效率低下的原因,让查询优化器更好的工作

(1)查询:

如何定位并优化慢查询Sql_第7张图片

id标明sql的执行顺序(越大越先执行)

(2)type字段和Extra字段

type:

表示mysql找到数据行的方式

index/all表示全表扫描,是最慢的,每次看到这两个要特别注意

extra:

可以获取到更为详细的信息:

出现以下两项表示mysql无法使用索引,应尽可能优化

如何定位并优化慢查询Sql_第8张图片

(3)范例中的这两个字段

如何定位并优化慢查询Sql_第9张图片

如何定位并优化慢查询Sql_第10张图片

都是需要优化的

3.对sql进行调优

调优方式:修改sql或者尽量让sql走索引

方法一:修改sql语句

(1)分析sql语句和数据库表的设计

如何定位并优化慢查询Sql_第11张图片

发现account是走索引的,而name是没有的

(2)将查询修改为查account

(3)再次执行explain

如何定位并优化慢查询Sql_第12张图片

如何定位并优化慢查询Sql_第13张图片

已经走了索引

发现字段中多了一个key:如何定位并优化慢查询Sql_第14张图片

表明走了key的索引

(4)检验

再次执行:

查询慢日志:数量为2

如何定位并优化慢查询Sql_第15张图片

使用终端打开慢日志记录的位置

如何定位并优化慢查询Sql_第16张图片

发现快了2s多,提高了性能

 

方法二:加索引

(1)给name加上索引

(2)再次执行查询,并查看字段信息

如何定位并优化慢查询Sql_第17张图片

(3)执行select并进入终端

如何定位并优化慢查询Sql_第18张图片

可见,性能得到了提升

三、mysql查询优化器会使用哪种方式查询

如何定位并优化慢查询Sql_第19张图片

这条语句走的是非主键,并且比强制使用主键查询还要快。

你可能感兴趣的:(数据库)