《一》MySQL基础架构

大体上MySQL可以分成Server层存储引擎层两部分。其中Server层中包含连接器、查询缓存、分析器和执行器,涵盖MySQL的大多数核心服务功能以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等;而存储引擎层则负责数据的存储和提取,其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。不同的存储引擎共用一个Server层。

MySQL基础架构示意图:
《一》MySQL基础架构

【例】select语句在MySQL的各个功能模块中执行的过程:

  • 连接器:负责跟客户端建立连接,获取权限、维持和管理连接。
  • 查询缓存:连接建立以后,就可以执行select语句了。当MySQL拿到一个查询请求后,会先查询缓存,如果之前执行过该语句,其结果可能会以**<key,value>的形式被直接缓存在内存中,其中key是查询的语句**,value是查询的结果。如果能直接在缓存中找到key,那么直接返回key对应的value即可。但大多数情况还是不要使用查询缓存,弊大于利。MySQL8.0版本就直接把查询缓存功能删掉了。
  • 分析器:没有命中查询缓存,则执行sql语句。分析器需要对SQL语句做解析——先做词法分析,再做语法分析,最后做语义分析
  • 优化器: 在开始执行之前,还要先经过优化器的处理——当表里有多个索引时,决定使用哪个索引;或者有夺标关联时,决定各个表的连接顺序。
  • 执行器:开始执行时,要先进行权限验证,验证通过才能继续执行,在引擎接口按行遍历表,根据ID或者索引进行逻辑判断,返回所有满足条件的记录集。