索引5:mysql如何定位并调优慢sql查询。

mysql如何定位并优化慢sql查询。
具体问题需要具体分析,具体考虑。
大致思路
1.定位,根据sql慢日志定位查询慢sql.
具体操作。
show variables like ‘%quer%’
重点关注一下三个查询结果:
show_query_log :off/on 是否展示慢日志
slow_query_log_file 慢日志存放路径
long_query_time 定义为慢查询的时间

需要开启慢日志,根据需求更改慢查询定义时间。
可根据以下语句修改,需要注意set修改为临时修改,全局修改需要my.ini文件修改。
show status like ‘%quer%’ 慢查询的条数

在这里插入图片描述
2.借助explain等工具分析sql。
explain select name from person order by name desc
在这里插入图片描述
关注点1:id
在联合查询语句中,id的数值越大,执行优先级越高。
type :mysql找到数据行的方式,性能由高到低为:

在这里插入图片描述
当type为index all时需要优化,因为此时进行的是全表扫描。
关注点2:extra
在这里插入图片描述
3.修改sql语句或者尽量让sql语句走索引
查看表结构,查看当前索引,借助explain,KEY的结果表示为,当前语句借助的索引。
为当前语句添加索引,alter table person add index idx_name(name)
使用强制索引比较各个索引下的执行时间;在具体分析考虑如何使用索引
select name from person force index (primary)
在这里插入图片描述
扩展:mysql的查询优化机制
select account(id) from person id—主键
会通过主键索引嘛。
mysql的查询优化索引:尽可能使用索引,使用最严格的索引排除更多的数据行。
所以,不一定account会根据主键,也可能是唯一键,由mysql的查询机制决定用哪个索引查询时间最少。
扩展2:
索引结构下b+树使用密集索引还是稀疏索引查询速度更快?
密集索引,使用链表链接,但是叶子节点除了存储键值对还会存储其它列的信息。
稀疏索引只存储关键字和键值对。(叶子节点)
所以稀疏索引一次查询可以加载更多的关键字用来做account统计,而密集索引除了键值对还有其它列的额外信息,统计速度逊于稀疏索引。
更多sql调优参考:https://zhuanlan.zhihu.com/p/48385127

https://blog.csdn.net/u010520146/article/details/81161762

发布了6 篇原创文章 · 获赞 18 · 访问量 3421

猜你喜欢

转载自blog.csdn.net/qq_41627514/article/details/104283295