mysql定位慢查询以及分析原因

看本篇文章之前建议先了解索引,索引分类,和回表查询的概念

导致慢查询的原因

  1. 聚合查询

  2. 多表查询

  3. 表数据量过大查询

  4. 深度分页查询

慢查询的现象就是页面加载过慢、接口压测响应时间过长,超过1s

如何定位慢查询

方案一

方案二

MySQL自带慢日志,这里主要讲这个,我的是8版本,你如果是5版本可能本篇文章帮助不大。

mysql中查询慢日志是否开启

复制代码
 show variables like 'slow_query_log'; 

mysql装在windows的话修改系统的my.ini配置文件,在这里能找到这个文件: C:\ProgramData\MySQL\MySQL Server 8.0,注意:ProgramData是隐藏起来的。

文件修改好是这样的。你只需要改第一行和第三行。第一行是慢日志开关,1为开,0为关。 第三行是慢日志记录时间(单位秒),sql执行超过这个时间就会被记录到慢日志文件

圈起来第二行是让你注意,慢查询日志不叫CCC-slow.log,千万注意,要想知道在哪,在mysql里面执行下面代码块语句。

复制代码
show variables like '%slow_query_log%';  

现在我执行一条语句,执行时间为15.21s,超过了2s

此时慢日志里面就会记录该条语句信息。

如何分析慢查询原因

导致慢的有下面四个原因,现在我们定位到了一条慢查询,如何分析导致慢的原因呢? 有一招叫做查看sql执行计划

这里来看个前置知识,慢查询聚合索引 的解决办法是建立临时表,多表查询 是优化sql,尽量别用多表查询,放业务里面查多次。表数据量过大用索引解决,深度分页查询后续再说。

explain加在sql命令前面就可以查看该sql的执行计划,exlain是mysql自带的分析工具。 来看一个新sql的执行计划,这是个根据条件查询语句,可以根据索引去优化。

你需要关注字段如下

  1. "possible_keys": 可能用到的索引。

  2. "key": 实际用到的索引

  3. "key_len": 索引占用的大小

  4. "extra": 额外的优化建议,证明有优化空间,例如下图

  1. "type": 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、index、all。 接下来我详细给你介绍一下这几个值的含义。

null: 是我们的sql没使用到表,这个很少见,无需关注。

system: 是指查询的是mysql系统中的表,开发也不常用。

const:(常用),根据主键查询。

eq_ref: 主键索引查询或唯一索引查询

ref: 根据索引查询,和eq_ref不一样,是其他索引,可以查出多条数据。例如select * from user where name = "张三";有可能多个人叫张三。

range: 范围查询。

index: 全索引查询,索引树扫描,效率不高,一般都是需要优化的。

all: 不走索引,效率最低,全盘扫描。需要优化。

慢查询分析总结

相关推荐
AI 嗯啦1 小时前
SQL详细语法教程(七)核心优化
数据库·人工智能·sql
@蓝眼睛1 小时前
mac的m3芯片安装mysql
mysql·macos
ClouGence2 小时前
三步搞定!GaussDB 实时数据入仓
数据库·后端
冰块的旅行2 小时前
MySQL 的时区问题
mysql
舒一笑3 小时前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
鼠鼠我捏,要死了捏3 小时前
生产环境MongoDB分片策略优化与故障排查实战经验分享
数据库·mongodb·分片
KaiwuDB4 小时前
KWDB 分布式架构探究——数据分布与特性
数据库·分布式
笨蛋不要掉眼泪4 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
Leiwenti5 小时前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
你的电影很有趣5 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存