MySQL知识梳理图,一图看完整篇文章: html
MySQL优化一直是老生常谈的问题,尤为在面试环节中,但在作MySQL的优化以前,得先了解MySQL的执行流程是怎样,这样才更好的去优化。web
面试过程当中也一般会问若是高并发或者用户反映系统太卡,咱们该怎么去优化?面试
简易的流程图以下:数据库
大体流程描述:缓存
MySQL查询缓存会保存查询返回的完整结构。当查询命中该缓存时,MySQL会马上返回结果,跳过了解析、优化和执行阶段。 但查询缓存是默认不开启的,且要求SQL和参数都是同样,同时查询缓存系统会跟踪查询中涉及的每个表,若是这些表发生变化,则该表相关的全部缓存数据均会失效。因此命中率通常较低,生产环境中也不多用到,具体流程就不描述了。若是感兴趣的能够查阅详细资料。服务器
若是查询缓存未命中,则到解析器。解析器主要是对SQL语句进行解析,使用MySQLy语法规则进行验证和解析查询,并生成对应的解析树。 获得解析数以后,还须要作预处理,预处理则进一步检查解释树是否合法,以及进行一些优化,好比检查数据表和列是否存在,若是有计算,会将计算的结果算出来等等。架构
查询优化器是整个流程中重要的一环。查询优化器会将预处理以后的解析树转化成执行计划。一条查询能够有多种执行方法,最后均会返回相同结果。查询优化器的做用就是找到这其中最好的执行计划。 生成执行计划的过程会消耗较多的时间,特别是存在许多可选的执行计划时。若是在一条SQL语句执行的过程当中将该语句对应的最终执行计划进行缓存,当类似的语句再次被输入服务器时,就能够直接使用已缓存的执行计划,从而跳过SQL语句生成执行计划的整个过程,进而能够提升语句的执行速度。 一般所讲的优化SQL,其实就是想让查询优化器,按照咱们的思路,帮咱们选择最优的执行方案。并发
查询执行计划,就是MySQL查询中的执行计划,好比是执行where语句仍是from语句,下面有一张执行顺序的图。负载均衡
最早执行的老是FROM操做,最后执行的是LIMIT操做。其中每个操做都会产生一张虚拟的表,这个虚拟的表做为一个处理的输入,只是这些虚拟的表对用户来讲是透明的,可是只有最后一个虚拟的表才会被做为结果返回。若是没有在语句中指定某一个子句,那么将会跳过相应的步骤。异步
执行计划会传给查询执行引擎,执行引擎选择存储引擎来执行计划,到磁盘中的文件中去查询。 影响这个查询性能最根本的缘由是什么? 实际上是硬盘的机械运动,也就是咱们平时熟悉的IO,因此一条查询语句是快仍是慢,就是根据这个时间的IO来肯定的。那怎么执行IO又是什么来肯定的?就是传过来的这一份执行计划.
更多文章请关注公众号 『天澄技术杂谈』
参考文章:
https://juejin.im/post/5b7036de6fb9a009c40997eb
https://blog.csdn.net/I980663737/article/details/78421523
https://www.cnblogs.com/rollenholt/p/3776923.html
复制代码