MySQL的逻辑架构
MySQL的逻辑架构通常被划分为三层,这种分层设计使得MySQL具备了极高的灵活性和可插拔性。当一条SQL语句发送到MySQL时,它会自上而下穿过这三个核心层:
1. 连接层 (Connection Layer)
这是MySQL的最上层,主要负责处理客户端的连接请求。
-
连接管理: 维护与客户端的连接(如JDBC、Navicat、命令行等),通常采用线程池技术,一个连接对应一个线程。
-
身份认证与安全: 验证客户端的用户名、密码以及主机IP是否拥有权限。
-
连接限制: 控制最大连接数(
max_connections),防止资源耗尽。
2. 服务层 / 核心层 (Service Layer)
这是MySQL的大脑,所有跨存储引擎的核心功能(如日期、时间、数学运算、加密函数)以及所有的存储过程、触发器、视图都在这一层实现。
-
解析器 (Parser): 进行词法和语法分析。将你写的SQL字符串拆解并构建成“解析树”,检查语法是否报错(比如把
SELECT写成了SELCT)。 -
优化器 (Optimizer): 决定SQL的执行方案。它会分析多种执行路径,选择成本最低的方案(例如决定使用哪个索引、多表JOIN的连接顺序等)。
-
执行器 (Executor): 根据优化器生成的执行计划,调用底层存储引擎提供的API接口来读取或修改数据,并将结果返回给客户端。在此阶段也会进行表级别的权限检查。
-
查询缓存 (Query Cache): (注意:MySQL 8.0 已经彻底移除了查询缓存)在早期版本中,如果查询命中缓存,会直接返回结果而不经过解析和优化阶段。
3. 存储引擎层 (Storage Engine Layer)
这是MySQL的手脚,负责数据的真正存储和提取。它的架构是插件式的。
-
特性: 服务层通过 API 与存储引擎进行通信,引擎层对上层隐藏了底层的物理实现差异。不同的存储引擎具有不同的特性。
-
常见引擎:
-
InnoDB: 默认引擎(MySQL 5.5.5及之后),支持事务、行级锁、外键、MVCC,适合绝大多数OLTP业务。
-
MyISAM: 不支持事务和行级锁(只有表锁),但查询速度快,适合读多写少且不需要事务的场景。
-
Memory: 数据存在内存中,速度极快,但重启后数据丢失,常用于临时表。
-
为了更直观地理解一条SQL是如何在这些层之间流转的,你可以通过下方的交互式架构图来探索各个组件的具体职责:
- 点赞
- 收藏
- 关注作者
评论(0)