流程图

file

细节步骤

  1. 连接器:负责处理客户端连接(管理连接池),以及进行鉴权操作等功能。

  2. 缓存:如果开启查询缓存,查询前会查看缓存有无数据,如果有数据直接返回,无数据则进行下一步操作。(当然MySQL的缓存效率并不高,不推荐使用,后续版本MySQL也将缓存去除了。)

  3. 分析器:主要有三步:词法分析、语法分析、预处理。

    • 词法分析和语法分析主要判断该条SQL语句是否有语法错误,如果出错则报错,没出错则进行预处理。
    • 预处理环节,即将人能看得懂的SQL语句解析成一颗语法树(如下图所示)。
      file
  4. 优化器:对SQL语句进行优化。主要有两个方面:

    • 多表连接优化:优化器会选择较优的连接方式
    • 索引选择优化:当一条SQL语句有多个索引选择时,优化器会选择较优的索引(参考索引建立原则)。
  5. 执行器:主要有两个功能:

    • 权限校验:判断用户对即将查询的表有没有查询的权限,没权限则停止执行并返回错误。
    • 调用引擎层接口查询:通过调用储存引擎的接口,进行数据读取。
  6. 储存引擎:MySQL的储存引擎是插件式的。储存引擎种类有很多,比如说MySIAM(旧版本)和InnoDB(新版本)是常用的。

参考资料

极客时间 —— MySQL45讲:一条SQL查询语句是如何执行的?

Categories:

Tags:

还没发表评论,快来发表第一个评论吧~

发表回复