流程图
细节步骤
-
连接器:负责处理客户端连接(管理连接池),以及进行鉴权操作等功能。
-
缓存:如果开启查询缓存,查询前会查看缓存有无数据,如果有数据直接返回,无数据则进行下一步操作。(当然MySQL的缓存效率并不高,不推荐使用,后续版本MySQL也将缓存去除了。)
-
分析器:主要有三步:词法分析、语法分析、预处理。
- 词法分析和语法分析主要判断该条SQL语句是否有语法错误,如果出错则报错,没出错则进行预处理。
- 预处理环节,即将人能看得懂的SQL语句解析成一颗语法树(如下图所示)。
-
优化器:对SQL语句进行优化。主要有两个方面:
- 多表连接优化:优化器会选择较优的连接方式
- 索引选择优化:当一条SQL语句有多个索引选择时,优化器会选择较优的索引(参考索引建立原则)。
-
执行器:主要有两个功能:
- 权限校验:判断用户对即将查询的表有没有查询的权限,没权限则停止执行并返回错误。
- 调用引擎层接口查询:通过调用储存引擎的接口,进行数据读取。
-
储存引擎:MySQL的储存引擎是插件式的。储存引擎种类有很多,比如说MySIAM(旧版本)和InnoDB(新版本)是常用的。
参考资料
极客时间 —— MySQL45讲:一条SQL查询语句是如何执行的?
还没发表评论,快来发表第一个评论吧~