MySQL基础架构
MySQL基础架构
MySQL
大致可以分为客户端层、Server
层和存储引擎两层。
Server
层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL
的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持
InnoDB
、MyISAM
、Memory
等多个存储引擎。现在最常用的存储引擎是InnoDB
,它从MySQL 5.5.5
版本开始成为了默认存储引擎。不同的存储引擎,是共用同一个
Server
层的。
组件关系图如下:
客户端层
用户访问
MySQL
的接口。在客户端,用户可以输入SQL
语句,通过SQL
语句,实现对数据库的访问、操作和控制。
MySQL Server 层
连接器
连接器负责跟客户端建立连接、获取权限、维持和管理连接。
注意点:
- 连接器在用户登录时读取用户权限并用于后续判断,所以管理员修改密码对已登录用户无效(除非该用户重新登录)
- 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数
wait_timeout
控制的,默认值是 8 小时
查询缓存
把查询到的结果缓存并返回(
KV
结构,Key
:select
语句的hash
值,Value
:查询结果)。但
MySQL
缓存机制有个弊端,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。如此一来,对于更新频繁的表来说,缓存命中率会非常低!MySQL 8.0
版本直接将查询缓存的整块功能移除了。
分析器
对一条
SQL
进行词法分析、语法分析。也就是准确识别select
/update
/insert
/delete
、表名、字段名以及各种条件,并对SQL
的语法进行校验。
优化器
优化器会对执行的
SQL
进行优化,主要有:
表里面有多个索引的时候,决定使用哪个索引
在一个语句有多表关联(
join
)的时候,决定各个表的连接顺序
执行器
执行器负责调用存储引擎,返回结果,主要有以下几个步骤
- 权限校验(连接器阶段已经读取权限,这里只要校验当前用户是否拥有操作这张表的权限)
- 选择引擎
- 调用引擎提供的接口
存储引擎层
存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持
InnoDB
、MyISAM
、Memory
等多个存储引擎。现在最常用的存储引擎是InnoDB
,它从MySQL 5.5.5
版本开始成为了默认存储引擎。