1. 架构方式

2.png
上图中除了客户端外,可以看出 MySQL 的架构,主要分为两大部分:

  • Server 层包括连接器、查询缓存、分析器、优化器、执行器等等。基本上它包括了 MySQL 绝大多数的核心服务功能,以及所有的内置函数(例如日期、时间、数学、加密函数),同时例题存储过程、触发器、视图等跨存储引擎的功能都是在这一层实现的。
  • 存储引擎,主要负责的就是数据的存储和提取,并且它采用的是可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储应勤。现在最常用的存储引擎是 InnoDB,并且它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。

小结下:

  1. MySQL 的基本架构分为 Server 层和存储引擎两部分
  2. 从 MySQL 5.5.5 版本开始 InnoDB 就被当做默认存储引擎了

    2. 连接器

    从上述架构图也可以看出来,连接器作为客户端和 server 层的入口,它的主要作用就是处理身份认证和权限的管理,当用户登录数据库,连接器会对用户名和密码进行校验,即进行身份认证,如果校验同构,则会查询用户的所有权限,之后在此次连接中的所以需要校权的行为,都会依据此次查询出的权限列表,而在管理员修改了某个用户的权限后,并没有将用户踢下线的操作,也就是说,只要这个连接一直不断开,用户上一次的权限列表会一直生效。
  • wait_timeout 控制因客户端无操作的自动断开时间,默认值是 8 小时

    3. 查询缓存(8.0 已废弃)

    查询缓存的思路和我们使用 Redis 等是一样的,它被用来缓存 SELECT 查询语句,如果命中缓存,则会直接返回,如果没有命中,则继续执行正常流程,再把查询到的结果按照 key 是查询语句的 hash 值,value 是查询结果的格式存储。
    但是比较致命的是,只要有对一个表进行更新,这个表上的所有查询缓存都会被清空,也就是说,只要一张表被频繁的更新,就会导致缓存几乎不会被命中,所以 MySQL 8.0 已经完全废弃了这个功能。

    4. 分析器

    当跳过查询缓存后,就会进入分析器,分析器就是对一条 SQL 语句进行词法和语法的分析。

  • 词法分析:先提取关键字,例如 select/update/insert/delete 接着提取出查询的表、字段名、查询条件等。

  • 语法分析:词法分析后,去检查 SQL 语句是否正确,是否符合 MySQL 语法。

到这里就可以了,至于如何真正的去执行,还得继续向后走。

5. 优化器

优化器是真正执行前的重要一步,顾名思义,它会按照最优的执行方案去执行 SQL,例如多个索引的条件下,走哪条索引,多表查询时各个表的连接顺序。
但是究竟它是如何走的,是否就是最优,这里暂时先不提,我们继续向下看。

6. 执行器

在执行器中,开始真正的执行 SQL,大致能分为 3 步,权限校验、选择引擎,调用引擎接口。
如果用户没有对应权限,就会报错。