逻辑架构图

MySQL |  逻辑架构 - 图1

连接管理、解析与优化这些并不涉及读写表数据的组件划分到Servce层,读写表数据而是交给存储引擎层来做。通过这种架构设计,可以发现Servce层其实就是公用层,存储引擎层就是多态层,按需选择具体的存储引擎。再细想下,它和模板方法设计模式一摸一样,它们的执行流程是固定的,Servce层等于公用模板函数,存储引擎层等于抽象模板函数,按需子类实现。


Server

Server由连接器、查询缓存、分析器、优化器、执行器,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

每个客户端连接都在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。(高性能Mysql)

查询缓存

查询请求先访问缓存(key 是查询的语句,value 是查询的结果)。命中直接返回。
不推荐使用缓存,只要有对表的一个更新,就会把整张表所有查询的缓存清除(关闭缓存:参数 query_cache_type 设置成 DEMAND)。

分析器

  • 词法分析(识别sql语句每个字符串的含义)
  • 语法分析(根据语法规则,语法分析器会判断该sql语句是否满足mysql语法)

    优化器

    Mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。

    执行器

    判断对该表是否有查询权限。有权限的话,调用引擎接口提取数据符合查询条件的数据。

    存储引擎

    存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。