【MySQL】如何定位慢SQL(带你一文弄懂!)

目录

如何定位慢sql

什么是慢sql

定位慢SQL的步骤

具体执行步骤

查询是否开启慢查询

设置慢查询的时间限制

之后查询慢SQL日志就可以定位到具体的慢SQL

相关SQL查询

用Explain分析具体的sql语句


如何定位慢sql

什么是慢sql

        慢SQL是指执行时间较长的SQL语句。当数据库中的SQL查询或操作花费的时间超过一定阈值时,可以将其称为慢SQL。

定位慢SQL的步骤

1、设置慢查询日志(slow Quary Log):在MySQL中配置文件中启用慢查询日志功能

2、收集慢查询日志:等待一段时间之后,收集并分析慢查询日志,获取到执行时间较长的SQL

3、使用EXPLAIN分析:针对慢SQL语句,使用MySQL的EXPLAIN命令来分析查询执行计划,可以了解SQL语句的索引使用情况、连接类型、数据排序方式等信息,帮助优化查询性能

4、检查索引:检查SQL语句所涉及的表是否存在合适的索引。没有合适的索引可能导致全表扫描或者检索失败,进而影响性能。通过创建、修改或删除索引,可以提高SQL的执行效率

5、优化SQL语句:根据EXPLAIN的分析结果和索引优化情况,对慢SQL语句进行优化。可以通过调整查询条件、重写查询语句、合理使用索引等方式来提高查询性能

6、执行性能测试:在优化之后,进行性能测试并验证优化结果。比较前后SQL执行时间和资源消耗等指标

具体执行步骤

查询是否开启慢查询

mysql> show variables like "%slow%";
//查询是否开启了慢查询

在这里插入图片描述

        slow_query_log为OFF,表示未开启慢查询,直接set global slow_query_log=on;slow_query_log_file是存放慢查询日志的地址(set global 只是全局session生效,重启后失效,如果需要以上配置永久生效,需要在mysql.ini(linux my.cnf)中配置)

设置慢查询的时间限制

mysql> show variables like "long_query_time";

在这里插入图片描述

value值即为操作时长大于该值后就认为是慢sql

测试时值可以设置得小些

在这里插入图片描述

之后查询慢SQL日志就可以定位到具体的慢SQL

在这里插入图片描述

Time :日志记录的时间
​
User@Host:执行的用户及主机
​
Query_time:查询耗费时间 Lock_time 锁表时间 Rows_sent 发送给请求方的记录条数 Rows_examined 语句扫描的记录条数
​
SET timestamp 语句执行的时间点​

相关SQL查询

查询mysql的操作信息show status 显示全部mysql操作信息

/* 获得mysql的插入次数; */
show status like "com_insert%"; 
/* 获得mysql的删除次数; */
show status like "com_delete%"; 
/* 获得mysql的查询次数; */
show status like "com_select%"; 
/* 获得mysql服务器运行时间; */
show status like "uptime"; 
/* 获得mysql连接次数; */
show status like 'connections'; 
/* 服务器启动以来执行时间最长的20条SQL语句; */
SELECT * 
FROM information_schema.processlist 
WHERE COMMAND = 'Query' 
ORDER BY TIME DESC 
LIMIT 20;

用Explain分析具体的sql语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6KmXANA-1655266687300)(sql优化.assets/image-20220615112743974.png)]

 

 

id:选择标识符
​
select_type:表示查询的类型。
​
table:输出结果集的表
​
partitions:匹配的分区
​
type:表示表的连接类型
​
possible_keys:表示查询时,可能使⽤的索引
​
key:表示实际使⽤的索引
​
key_len:索引字段的长度
​
ref:列与索引的比较
​
rows:扫描出的行数(估算的行数)
​
filtered:按表条件过滤的⾏百分比
​
Extra:执行情况的描述和说明

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值