插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 
坚持不懈,越努力越幸运,大家一起学习鸭~~~

2哥:3妹,干嘛呢,你有没有看到新闻。成都的核酸系统“崩了”。
3妹:看到了,程序员又要被锅了。遇到系统突然“崩了”,该如何排查呢?
2哥:哈哈,3妹真是好学,emm,不过这个问题有点难,涉及的内容也比较多,我们后面再说。
3妹:切,2哥也有不懂的时候啊。
2哥:先说说你在干嘛呢。
3妹:还在学mysql呢,我们公司**统计之前还好好的, 现在数据量上来了,查询总是很慢,在想如何排查呢。
2哥:虽然我不太懂网络的原理,但是Mysql慢查询这块我知道啊。让我给你分析分析。

我认为,一个 SQL 执行的很慢,我们要分两种情况讨论:

1、大多数情况下很正常,偶尔很慢,则有如下原因

(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。

(2)、执行的时候,遇到锁,如表锁、行锁。

(3)、sql写的太烂

2、这条 SQL 语句一直执行的很慢,则有如下原因:

(1)、没有用上索引或则索引失效:例如该字段没有索引;或则由于对字段进行运算、函数操作导致无法用索引。

(2)、有索引可能会走全表扫描

怎样判断是否走全表扫描:

索引区分度(索引的值不同越多,区分度越高),称为基数,而数据量大时不可能全部扫描一遍得到基数,而是采样部分数据进行预测,那有可能预测错了,导致走全表扫描。

慢sql优化

01数据库中设置SQL慢查询

方式一:修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录( slow_query_log)

方式二:通过MySQL数据库开启慢查询:

02分析慢查询日志

可以通过如下命令定位低效率执行sql
show processlist;# sql 可以用 **explain **分析执行计划。

对于执行计划的分析,也是面试官喜欢考察的一个点。面试官:你是怎样使用explain的?对于执行计划你是怎样分析的?

这里简单带过,之后会详细解答。

主要关注这几个字段即可:

type:表示MySQL在表中找到所需行的方式,或者叫访问类型

  • type=ALL,全表扫描,MySQL遍历全表来找到匹配行

  • type=index,索引全扫描

  • type=range,索引范围扫描

  • type=eq_ref,唯一索引

  • type=NULL,MySQL不用访问表或者索引,直接就能够得到结果(性能最好)

possible_keys: 表示查询可能使用的索引

key: 实际使用的索引

key_len: 使用索引字段的长度

rows: 扫描行的数量

Extra

  • using index:覆盖索引,不回表

  • using where:回表查询

  • using filesort:需要额外的排序,不能通过索引得到排序结果

03慢sql如何优化

对于MYSQL慢sql语句的优化,我们也可以分几个方面来进行分析(基本覆盖全面啦):

面试从这几方面考虑:索引+sql语句+数据库结构优化+优化器优化+架构优化。

索引

  • 尽量覆盖索引,5.6支持索引下推

  • 组合索引符合最左匹配原则

  • 避免索引失效

  • 在写多读少的场景下,可以选择普通索引而不要唯一索引。更新时,普通索引可以使用change buffer进行优化,减少磁盘IO,将更新操作记录到change bufer,等查询来了将数据读到内存再进行修改.

  • 索引建立原则(一般建在where和order by,基数要大,区分度要高,不要过度索引,外键建索引)

sql语句

1、分页查询优化

该方案适用于主键自增的表,可以把Limit查询转换成某个位置的查询。

select * from tb_sku where id>20000 limit 10;

2、优化insert语句

  • 多条插入语句写成一条

  • 在事务中插数据

  • 数据有序插入(主键索引)

数据库结构优化

1、将字段多的表分解成多个表有些字段使用频率高,有些低,数据量大时,会由于使用频率低的存在而变慢,可以考虑分开。

2、对于经常联合查询的表,可以考虑建立中间表

优化器优化

1、优化器使用MRR

原理:MRR 【Multi-Range Read】将ID或键值读到buffer排序,通过把「随机磁盘读」,转化为「顺序磁盘读」,减少磁盘IO,从而提高了索引查询的性能。

开启mrr:

对于 Myisam,在去磁盘获取完整数据之前,会先按照 rowid 排好序,再去顺序的读取磁盘。

对于 Innodb,则会按照聚簇索引键值排好序,再顺序的读取聚簇索引。

**磁盘预读:**请求一页的数据时,可以把后面几页的数据也一起返回,放到数据缓冲池中,这样如果下次刚好需要下一页的数据,就不再需要到磁盘读取(局部性原理)

索引本身就是为了减少磁盘 IO,加快查询,而 MRR,则是把索引减少磁盘 IO 的作用,进一步放大

https://zhuanlan.zhihu.com/p/148680235

架构优化

读/写分离(主库写,从库读)

总结:

1、先设置慢查询(my.ini或数据库命令)

2、分析慢查询日志

3、定位低效率sql(show processlist)

4、explain分析执行计划(是否索引失效,用到索引没,用了哪些)

5、优化(索引+sql语句+数据库结构优化+优化器优化+架构优化)

【教3妹学mysql】一条慢sql如何排查优化相关推荐

  1. 【教3妹学java】2.引用数据类型

    2哥:3妹,昨天教你的java基本数据类型 掌握了吗? 3妹:掌握了,java有8大基本类型(byte,short,char,int,long,float,double,boolean)-- 2哥:我 ...

  2. 教小学妹学算法:诺基亚引出的动态规划问题

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 今天还是将那位入坑算法的小学妹 ...

  3. 教小学妹学算法:搜索算法解决迷宫问题

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 最近有一位小学妹 Coco 入 ...

  4. 教小学妹学算法:十大经典排序算法深度解析

    最近有一位小学妹 Coco 入坑了算法,结果上来就被几个排序算法给整懵逼了,各种排序眼花缭乱,也分不清什么时候该用什么排序了. 今天呢,就在这分享一下我给小学妹讲十大经典排序算法的过程. 好吧,那我们 ...

  5. 【教3妹学算法-每日3题(3)】 判断矩阵经轮转后是否一致

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:小呀么小二郎呀, 背着那书包上学堂. 2 ...

  6. 【教3妹学算法-每日3题(3)】 和至少为 K 的最短子数组

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:小呀么小二郎呀, 背着那书包上学堂. 2 ...

  7. 【教3妹学java】类加载的过程是什么样的?

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 2哥:"今天只有残留的躯壳,迎接光辉 ...

  8. 【教3妹学算法-leetcode】数组能形成多少数对

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:这么热的天气还要持续多久啊,快要被热死了 ...

  9. 【教3妹学算法-每日3题(1)】商品折扣后的最终价格

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:哎,又到周一了,不想上班不想上班,什么时 ...

最新文章

  1. 【Asp.Net】得到http请求中的参数语句
  2. LeetCode Copy List with Random Pointer
  3. PHP 遇见 Serverless,帮你解决这些痛点
  4. Knowledge Review:超越知识蒸馏,Student上分新玩法!
  5. 论文浅尝 | 面向单关系事实问题的中文问答模型
  6. 计算机技术知识字,计算机基础知识
  7. [Java2 入门经典]第6章 类的扩展与继承
  8. ubuntu14 lamp环境下安装swoole1.8.6
  9. 真核生物基因结构 mRNA结构
  10. python3安装完,出现 No module named '_ssl',解决方案
  11. 扫描文件存电子版方法
  12. qq邮箱如何在win10邮箱连接到服务器,Win10系统自带Mail应用添加QQ邮箱的方法
  13. VS2015许可证过期
  14. Android 连接wifi 检测是否需要portal 认证
  15. 财务会计基础(二)复式记账法
  16. 北大青鸟IT教育14%股权挂牌转让
  17. centos7代理设置
  18. 10.1登录成功提示、加载提示
  19. Magicodes.IE之Excel模板导出教材订购表
  20. 微信小视频原来可以这样做

热门文章

  1. lyse - Errors and Processes
  2. VScode快捷键配置汇总
  3. html点击按钮动复制推广地址,JavaScript实现点击按钮就复制当前网址
  4. 给UILable中的文字添加删除线样式
  5. 【20保研】西安电子科技大学计科院关于举办2020年“优研计划”暑期夏令营的通知...
  6. 键盘按键ctrl与大小写切换键caps lock位置互换
  7. 网络诈骗侦查公司41st Parameter获1300万美元投资 Kleiner Perkins参投
  8. SAP SHDB 录制BDC并程序调用BDC教程
  9. SSRF漏洞之常见Bypass篇
  10. XX健康:移动端开发-体检预约验证码30秒倒计时短信验证码获取与验证DatePicker日历展示提交预约复杂流程阿里短信工具类