目录
说明
前言
Mysql前述
慢查询:
通常情况下出现的地方:
如何定位慢查询:
方案一:
方案二:
如何分析慢的原因:
说明
本文适合刚刚学习Java的初学者,也可以当成阿岩~的随手笔记.接下来就请道友们和我一起来学习吧!
如果本文有写的不对的地方,请道友们一定要说出来,避免影响到刚刚学习Java的道友们,也让阿岩~进行更新于改进,在这里谢谢各位道友了!
前言
Redis在上一篇中已经完结,今天开一个新坑:Mysql
Mysql前述
mysql是关系型数据库,在现在市场上大多数企业在用的热门数据库,所以还是很有必要去学习的.
今天在这里就不在去写Mysql的基础了,如果大家需要我后面可以单独出一篇.
今天主要写关于Mysql的慢查询
慢查询:
通常情况下出现的地方:
聚合查询 多表查询 表数据量过大查询 深度分页查询
表象: 页面加载过慢,接口压测响应时间过长
如何定位慢查询:
方案一:
开源工具进行监控:
调试工具: Arthas
运维工具:Prometheus Skywalking:可以检测出那个接口出现了慢查询问题
方案二:
MySql自带慢日志:一般在测试中开启,因为会耗用sql的性能
慢查询日志记录了所有执行时间超过指定参数的所有SQL语句的日志,可在配置中开启慢查询日志
配置完成后,可通过指令重新启动MySql服务器进行测试:(问题日志地址:/var/lib/mysql/localhost-slow.log)
如何分析慢的原因:
聚合查询和多表查询,表数据量过大查询可通过SQL执行计划找慢的原因:
可以采用将explain或者desc写在SQL语句前面,来查看如何执行的select语句的信息:
possible_key:当前sql可能会使用到的索引
<!--面试回答-->当前sql实际命中的索引(是否命中索引)
<!--面试回答-->key_len索引占用的大小(是否命中索引)
<!--面试回答是否出现了回表-->Extra额外的优化建议:
<!--面试回答是否由进一步优化的空间type-->这条sql的连接的类型,性能由好到差为:null system const eq_ref ref range index all
system 查询系统中的表
const 根据主键查询
eq_ref 主键索引查询或唯一索引查询
ref 索引查询
range 范围查询
(下面两种要进行优化)
index 索引数查询
all 全盘扫描
------阿岩~的随手笔记
预告:
在下一篇中我会将Mysql索引以笔记的形式进行发布,道友们一起来学习吧!