如何定位并优化慢查询Sql

目录

 

一、整体思路

二、具体部分

1.怎么查询慢日志

2.使用explain分析

3.对sql进行调优

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


一、整体思路

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查询优化器会使用哪种方式查询

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

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
慢查询SQL优化是数据库性能优化的一个重要方面,通过对慢查询SQL进行优化可以提升数据库的响应速度和性能。以下是一些慢查询SQL优化的测试点: 1. SQL语句的索引使用情况:检查SQL语句是否使用了适当的索引,包括主键索引、唯一索引、组合索引等。可以通过查看执行计划或使用数据库的索引分析工具来评估索引的使用情况。 2. 数据库表结构设计:检查数据库表的结构设计是否合理,包括字段类型选择、字段长度设置、表之间的关联关系等。不合理的表结构设计可能导致查询效率低下。 3. SQL语句的写法和语义:检查SQL语句的写法是否规范,避免使用不必要的子查询、多余的连接操作等。同时,还要确保SQL语句的语义正确,避免出现歧义或错误的查询结果。 4. 数据库参数配置:检查数据库的参数配置是否合理,包括缓冲区大小、并发连接数、查询缓存等。不合理的参数配置可能导致性能下降。 5. 数据库服务器性能监控:监控数据库服务器的性能指标,包括CPU利用率、内存利用率、磁盘IO等。通过监控可以及时发现性能瓶颈,并进行相应的优化。 6. SQL语句的执行计划:通过查看SQL语句的执行计划,可以了解SQL语句的执行过程和资源消耗情况。根据执行计划可以判断是否存在性能问题,并进行相应的优化。 7. 数据库表的统计信息:检查数据库表的统计信息是否准确,包括表的行数、索引的选择性等。不准确的统计信息可能导致查询优化器做出错误的执行计划选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMUHERO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值