1、执行步骤总览
客户端JDBC、ODBC触发一条sql语句的运行。
2、具体架构
2.1 连接器
身份认证和权限相关部分的管理。如果用户名密码通过校验,会去权限表里查询该用户的权限。后续只要连接不断开,即使管理员修改了用户的权限,用户权限也维持刚开始查询时的状态。
2.2 查询缓存
连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。如果缓存 key 被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。
2.3 分析器
若未命中目标,则会进入分析器,分析器分为两个步骤:
词法分析:一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。
语法分析: 判断你输入的 sql 是否正确,是否符合 MySQL 的语法。
2.4 优化器
优化器的作用就是它认为的最优的执行方案去执行,如果有索引选择索引。
2.5 执行器
MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
2.7 存储引擎
主要负责数据的存储和读取,采用可以替换的插件式架构。现在最常用的存储引擎是 InnoDB。