目录
MySQL基本架构图示意图(盗的)
本文章分析的SQL语句如下,id是主键索引
下面进入主题,SQL执行过程分析
大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。
Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。
select * from t where id=10;
1、连接器负责跟客户端建立连接、获取权限、维持和管理连接。
2、判断缓存是否开启,开启则进入步骤3,否则进入步骤4
3、检查SQL是否命中缓存,命中直接返回结果,否则进入步骤4
这里提一下,这里查询的key是此次查询的SQL语句,value是SQL上次查询的结果集。
即:key="select * from t where ID=10",value="上次进行此SQL查询的结果集合"
4、分析器开始对SQL进行词法分析,语法分析,语义分析
1)、词法分析目的:需要识别出SQL里面的字符串分别是什么,代表什么?
例如针对此SQL,需要词法分析的过程是:
2)、语法分析目的:判断SQL 语句是否满足 MySQL 语法
例如针对此SQL,语法分析的过程是:分析 “select"、"from"、”where" 是否符合语法。
注:如果将 "select"打成"slect",那么在这个阶段会抛出错误:You have an error in your SQL syntax;
3)、语义分析:对SQL中的表,字段属性等内容进行检查是否存在
例如针对此SQL,语义分析的过程是:检查表 “t” 是否存在,列 “id” 是否存在。
注:如果数据库不存在列“id”,会抛出列不存在的错误,就是分析器在语义分析阶段抛出的。
分析器结束后,进入步骤5
5、优化器主要进行执行方案选择和索引策略选择
当有多种索引、有多种执行方案可以执行时,优化器就会去考虑选择走什么索引(或者不走索引),走哪种执行方案,效率会更高。总的来说:优化SQL语句的执行,最终生成执行计划
对于此SQL,优化器决定使用id这个索引后进入步骤6
6、执行器进行语句执行,调用引擎层接口获取记录集并返回给客户端
分析器知道了你要做什么,通过优化器知道了该怎么做,执行器就开始执行,下面是过程:
至此,这条SQL语句“select * from t where id=10”就执行完成了!