专栏首页架构师玄学之路我所理解的Mysql执行计划原理

我所理解的Mysql执行计划原理

Mysql性能优化,从一名高级码农的角度,我们不能像java语言一样,通过debug来调试我们的业务SQL,那么我们怎么去验证优化之后的SQL语义呢,那么就是执行计划。

执行计划所包含的角色:

  • ORM框架
  • 连接池
  • Mysql Server
  • 存储引擎

那么负责生成执行计划的组件是什么?

回答:专门负责优化SELECT语句的优化器模块MySQL Query Optimizer通过计算分析收集的各种系统统计信息,为Query给出最优的执行计划——最优的数据检索方式。

MySQL Query Optimizer位于Mysql Server端,是Mysql自有的,与存储引擎无关。

当MySQL Query Optimizer接收到Query Parser(解析器)传递过来的Query时,会根据MySQL Query语句的相应语法对该Query进行分解分析,同时还会做很多其他的计算转化工作,如常量转化,无效内容删除,常量计算等。

MySQL Query Tree以Tree类型的数据结构存放数据处理的流程,指明了完成Query必须要经过的步骤,每一步的数据来源在哪里,处理方式是怎样的。MySQL使用了LEX和YACC语法(词法)分析工具生成MySQL Query Tree。

客户端向MySQL发送Query请求,命令解析器模块完成请求分类,把SELECT Query转发给MySQL Query Optimizer,MySQL Query Optimizer首先会对整条Query进行优化,进行常量表达式的预算,直接换算成常量值。并对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析Query中的Hint信息(如果有),看Hint信息是否可以完全确定该Query的执行计划。如果没有Hint或Hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行相应的计算分析,最后得出执行计划。

比较笼统的总结,Mysql会将整个客户端传过来的SQL语句,生成一颗指令树( MySQL Query Tree),然后通过存储引擎执行这颗指令树,最终的执行计划会包含了重构查询语句的全部信息,也就是Mysql的多表查询会从一个表开始一直嵌套循环、回溯完成所有表关联,本质上会是一颗左侧深度优先树。

游侠-一名对技术孜孜不倦的高级码农

本文分享自微信公众号 - 架构师玄学之路(andy_aty),作者:游侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式架构-SpringCloud如何实现CAP

    SpringCloud是现阶段最火的微服务治理框架,那么SpringCloud如何实现服务治理的CAP,这里我只想谈谈我对SpringCloud架构思想的理解。

    用户6969969
  • 一篇文章彻底搞懂Mysql事务相关原理

    引言redo log 与 undo log介绍redo logundo logmysql锁技术共享锁和排他锁意向锁记录锁间隙锁下一键锁插入意图锁自动上锁空间索引...

    用户6969969
  • 基础能力框架演进

    用户6969969
  • MongoDB Query 的几个方法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("name", "a"), Query...

    Java中文社群_老王
  • Mysql优化中Profiling的使用

    要想优化一条Query,就须要清楚这条Query的性能瓶颈到底在哪里,是消耗的CPU计算太多,还是需要的IO操作太多?要想能够清楚地了解这些信息,可以通过Que...

    dys
  • 使用JPA中@Query 注解实现update 操作

    spring使用jpa进行update操作主要有两种方式: 1、调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保...

    hbbliyong
  • Huginn 自定义抓取推送 smzdm 和 v2ex 的优惠信息

    昨天偶然发现还有bark这样的一款自定义推送小工具,部署了之后感觉很简洁,推送也很及时。一开始只是随便给女朋友推送一点骚扰通知,后来读 RSS 的时候想起来可以...

    huginn 中文网
  • Ryu的一些设计方法解读

    作为一个业余研究Ryu的软件工程师,一直惊叹于Ryu设计的优雅与简洁。一年多坚持下来,也有自己的一些收获,写出来和大家分享一下。 我们的故事从@set_ev_c...

    SDNLAB
  • Android 隐藏显示键盘

    版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/49...

    Hankkin
  • 小波变换通俗解释版

    从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的...

    智能算法

扫码关注云+社区

领取腾讯云代金券