本篇文章是我们【深入一点点】部分第一篇文章,既然我们要 “深入一点点”,那么就剥开 MySQL 的外衣~
先看看 MySQL 的各个 “部位”。
整体来说,MySQL 体系整体分为客户端连接器,服务端,存储引擎三部分。接下来我们就详细的聊聊 MySQL 数据的体系结构这个话题。

本文我们围绕着下面这张图来说。

20101-MySQL体系结构图.png

# 客户端连接器

主要的功能是:负责处理客户端的连接请求,与客户端建立连接。比如我们之前写过的 mysql -p 命令和使用 java 连接数据库的程序就是充当这个角色。

# Server 层

# 连接池 (连接器)

如上图中 connect pool 部分所示。

主要是负责管客户端和数据库创建的连接,维持,处理,和用户认证,即用户登录身份的认证和鉴权及安全管理,也就是用户执行操作权限校验。

当我们输入 mysql -p 这类命令去连接数据库的时候,输入命令的 shell 是客户端的角色,连接到数据库中组件就是连接器了。

当我输入 mysql -p , 之后,shell 中显示 enter password: 这个就是连接器做出的响应,我们输入密码进入后,可以通过命令: show processlist 来查看连接池中所有的连接。如下图

20103-查看连接池内容.png

# 查询缓存 (MySQL8.0 中已经删除了此功能)

图片是老图,在 MySQL8.0 版本中已经删除。所以该部分不做说明

# 解析器 ( parser )

主要负责对 SQL 的语句进行解析,生成解析树。

首先会将 SQL 语句解析成数据库结构,并且将这个数据结构传递到后续的步骤中。如果再解析的过程中发现错误,就直接返回错误结果。

# 优化器 ( Optimizer )

经过了解析器的工作之后, MySQL Server 就知道了你的需求是什么了,优化器的工作就是对需求进行优化,以达到更高的性能要求。

主要的工作是:优化器会根据解析树生成执行计划,并选择合适的索引,然后按照执行计划执行 SQL 语言并与各个存储引擎交互。

比如有一条 SQL : select * from test01_optimizer where id = 1 and value=1;

再执行的时候会有一下两种方案:

  • 先对比表中的数据,找到 id=1 的所有数据,然后在这些数据中再去查找所有 value=1 的数据。
  • 先对比表中的数据,找到所有 value=2 的所有数据,然后再这些数据中再去查找所有 id=1 的数据。

优化器就是确定使用性能更高一点的方案去执行任务。

# 执行器

通过上一步优化器的工作,得到了该条 SQL 的执行方案,执行器就会按照执行方案去执行查询。

查询执行引擎会根据 SQL 与语句中使用的存储引擎类型,调用不同对应的 API 接口,去与底层存储引擎缓存或者物理文件交互,得到查询结果,并由 MySQL 过滤后,将查询结果返回给客户端。

# 存储引擎层

存储引擎有很多种,比如 InnoDB,MyISAM 等等,后面我们会有一篇文章来介绍存储引擎,这里不多说。

接下来,我们详细的来说下 MySQL 服务器端的各个组件的工作原理。
这篇文章就到这里啦~

明日再见~

# 最后

希望与你一起遇见更好的自己~,一起交流,一起进步

qrcode.jpg