MySQL进阶系列:SQL执行计划分析及执行方式


执行计划分析在sql调优中占有举足轻重的地位,通过Explain+我们自定义的SQL便可得出该SQL的执行计划,如下:

在这里插入图片描述

我们来分析一下执行计划中比较重要的几列:

id列

它是select的序列号,有几个select就有几个id,并且id的顺序是按select出现的顺序增长的。

id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行。

table列

即对应select的那个表。

type列

这一列表示SQL的优化程度,依次从最优到最差分别为:system>const>eq_ref>ref>range>index>ALL。一般来说,得保证查询达到range级别,最好达到ref。

key列

实际走的索引。

rows列

mysql内部估算的结果数或扫描数。

Extra列

这一列展示一些额外信息,重要的信息有以下几个:

  • 1)Usingindex:表示使用了覆盖索引(覆盖索引的意思就是只查询索引树上的字段,减少了回表操作,从而提升了速度);

  • 2)Usingwhere:使用where语句来处理结果,并且查询的列未被索引覆盖;

  • 3)Usingindexcondition:查询的列不完全被索引覆盖,where条件中是一个前导列的范围;

  • 4)Usingtemporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化;

  • 5)Usingfilesort:使用普通字段排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的。

SQL在MYSQL中如何执行

要弄懂这个问题,首先我们要搞清楚MYSQL的内部结构,如下:

在这里插入图片描述

SQL执行过程如下:

MYSQL作为服务端,我们的程序作为客户端通过TCP与MYSQL保持一个长连接。

MYSQL把我们的SQL作为一个key去缓存中查询(MYSQL的缓存采用的是LRU淘汰算法来实现缓存的淘汰机制的),判断是否缓存命中。

如命中,则直接返回数据;如未命中,则继续下面的流程。

MYSQL实现了一套语法分析器(C语言写的),通过这个分析器来判断我们SQL语法的正确性。

语法正确之后,再通过内部实现的优化器对我们的SQL进行一些优化,包括成本Cost计算等等(这就是为什么我们觉得某个SQL理论上会走索引,但是执行计划显示却没有走索引的原因),最终生成我们SQL的执行计划。

当然,我们也可以通过FORCE_INDEX(…)强制走索引。

优化完成之后,会进入MYSQL内部的执行器,然后通过执行器调用我们这张表对应的存储引擎,比如Innodb、 MyISAM、Memory等等。

执行引擎会根据优化器分析出来的结果,也就是通过最优索引去对应的索引树上找到对应的数据,同时进行索引树的维护。

最后,下面是我整理出来的一份软件测试工程师发展方向知识架构体系图。

希望大家能在这个成长过程中收益良多。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好“不积跬步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。

由于CSDN上传图片大小有限,有需要的朋友可以关注我的公众号:程序员二黑,回复1,即可获取原图。

下面是一份配套的软件测试资源包:

上面是一些配套资源,对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

关注我的微信公众号:程序员二黑,即可免费获取!

最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流学习。

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救?

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值