本文简单聊一下,我对Mysql是如何执行sql语句的一点理解。暂不涉及关于执行计划的部分,关于执行计划我会在后续的部分单独再写一些东西。

MySQL逻辑架构
大家肯定都听过这样的话:“Mysql是插件式的存储引擎”。那么什么是插件式的存储引擎呢?我们首先看一下整体的Mysql的架构是怎样的。

从上图可以看出:mysql是由以下几个组件构成的。

  1. 客户端:
    严格来说,客户端算不算整个架构体系中的内容,可能不同的人有不同的理解。我个人理解是应该包含的,或者是说对mysql整个架构体系肯定是包含对外输出的接口的,客户端是对这个接口的实现。
  2. 核心服务:
    这里面包含的内容是比较多的,大体来看,有以下几个部分:
    1)连接池组件:管理缓冲用户连接,线程处理等需要缓存的需求;
    2)管理服务和工具组件;
    3)sql接口组件:接受用户的SQL命令,并且返回用户需要查询的结果;
    4)查询分析器组件:SQL命令传递到解析器的时候会被解析器验证和解析;
    5)优化器组件:对传入SQL进行优化;
    6)缓存组件;
  3. 存储引擎:
    这里就就是我们所说的插件式存储引擎,可以选择InnoDB,MyISAM,NDB等等;
  4. 物理文件:
    数据库对应底层的数据文件;
    MySQL的执行过程:
    可以用如下的图来解释一下sql到底是如何执行的

    1.Mysql客户端建立与Mysql服务器的通信;
    2.查询缓存中是否有结果的缓存,如果有,那么直接返回;如果没有,那么需要新建查询;
    3.sql语法解析;
    4.对sql进行优化;
    5.把优化后的sql交给存储引擎,存储引擎执行,返回结果;
    6.缓存模块记录结果,并返回数据。

以上为我对sql执行的一点简单粗略的理解,如有错误,望指正。