mysql体系结构

一、MySQL 体系结构

要理解存储引擎,首先要知道它在 MySQL 整体架构中的位置。

MySQL 从上到下分为四层:

1、连接层负责管理客户端连接和认证;

2、服务层是核心,负责 SQL 解析、优化和执行;

3、存储引擎层负责数据的实际存取;

4、最底层是操作系统文件系统。

存储引擎是可插拔的,这是 MySQL 架构最大的特点。同一个数据库里,不同的表可以用不同的存储引擎,上层的 SQL 接口完全不需要关心底下用的是哪种引擎。

MySQL 四层核心架构

MySQL 是典型的分层解耦架构,每一层职责清晰,从外到内依次是:

表格

层级 核心定位 你必须掌握的核心能力
1. 连接层 客户端入口 连接管理、身份认证、线程复用
2. 服务层 MySQL 的「大脑」 SQL 解析、优化、执行、缓存
3. 引擎层 MySQL 的「心脏」 数据读写、事务、锁、索引(InnoDB 核心)
4. 存储层 数据的「仓库」 物理存储、日志管理、数据落盘

🔹 第一层:连接层(最外层,入口层)

核心作用 :负责客户端与 MySQL Server 的连接管理、身份认证,是所有请求的入口。

你必须掌握的核心:
  1. 客户端连接器
    • 支持多种接入方式:Native C API、JDBC(Java)、ODBC、PHP/Python 等,对应你工业场景中 C#/Python 脚本连接 MySQL 的底层原理。
    • 作用:把不同语言的请求,统一转换成 MySQL 能识别的协议。
  2. 连接池(Connection Pool)
    • 核心功能:线程复用、连接限制、内存校验、缓存管理
    • 为什么重要:避免频繁创建 / 销毁线程(开销极大),用连接池复用已有连接,提升高并发场景性能。
    • 你需要懂:连接池的作用、参数配置(比如 max_connections 最大连接数)。
  3. 身份认证
    • 客户端连接时,校验用户名、密码、IP 权限,只有认证通过才能进入下一层。

🔹 第二层:服务层(MySQL 的「大脑」,核心中的核心)

这是 MySQL 最核心的一层,所有 SQL 解析、优化、执行逻辑都在这里,也是你必须吃透的层级。

核心模块 & 你要掌握的重点:
  1. SQL 接口(SQL Interface)
    • 作用:接收客户端发来的 SQL(DML/DDL/ 存储过程 / 视图 / 触发器等),统一处理。
    • 你要懂:DML(增删改查)、DDL(建表 / 改结构)、DCL(权限)的区别,对应你日常写的 SQL 语法。
  2. 解析器(Parser)
    • 核心工作:语法解析 + 语义校验 + 权限校验
    • 流程:
      1. 把 SQL 字符串拆解成「语法树」,检查语法是否正确(比如少写逗号、关键字错误)
      2. 校验语义(比如表 / 字段是否存在、用户有没有操作权限)
    • 你要懂:解析器的作用,SQL 报错(语法错误)就是这一层抛出的。
  3. 查询优化器(Optimizer)
    • 核心工作:选择最优执行计划
    • 作用:基于统计信息,分析多种执行路径(比如用不用索引、先连哪张表),选出成本最低的方案。
    • 你要懂:EXPLAIN 工具就是看优化器生成的执行计划,这是你调优 SQL 的核心工具。
  4. 缓存(Cache & Buffer)
    • 作用:缓存查询结果、引擎相关缓存,减少磁盘 IO。
    • 注意:MySQL 8.0 已移除查询缓存,现在主要是引擎层的缓冲池(InnoDB Buffer Pool)。
  5. 系统管理工具
    • 包含备份恢复、主从复制、集群、权限管理、元数据管理等,对应你日常的运维操作。

🔹 第三层:引擎层(MySQL 的「心脏」,数据操作的核心)

这是 MySQL 最具特色的可插拔存储引擎架构,也是必须 100% 掌握的层级,直接决定数据的存储、事务、锁、性能。

核心重点:
  1. 可插拔架构
    • 可以按需选择不同的存储引擎(比如 InnoDB、MyISAM 等),不同引擎有不同特性。
    • 你要懂:如何查看 / 指定引擎show engines;、建表时 engine=InnoDB)。
  2. 核心引擎:InnoDB(你唯一需要重点掌握的)
    • 为什么重要:MySQL 5.5+ 默认引擎,支持事务、行级锁、外键、崩溃恢复,是生产环境唯一推荐的引擎。
    • 核心职责:
      • 索引管理(B + 树索引、聚簇索引)
      • 存储管理(数据页、缓冲池)
      • 事务管理(ACID、Redo/Undo 日志)
      • 锁机制(行锁、表锁、悲观锁 / 乐观锁,对应你之前学的 for update
  3. 其他引擎(了解即可)
    • MyISAM:不支持事务、表锁,仅适合读多写少的场景(已淘汰)
    • Memory:数据存内存,速度快,断电丢失(临时表用)
    • Archive:压缩存储,适合归档数据
  4. 核心管理模块:Memory, Index & Storage Management
    • 对应你学的索引、缓冲池、存储结构,是 InnoDB 性能调优的核心。

🔹 第四层:存储层(数据最终落盘的「仓库」)

核心作用 :负责数据的物理存储、日志管理,把引擎层的操作落地到磁盘。

你必须掌握的核心:
  1. 系统文件

    • 支持的文件系统:NTFS、ext2/3/4、NFS 等,对应你服务器的磁盘存储。
  2. 核心日志文件(面试 / 运维必背)

    表格

    日志类型 作用 你要懂的核心
    Redo Log(重做日志) 崩溃恢复,保证事务持久性 InnoDB 核心,记录数据修改,宕机后重放恢复数据
    Undo Log(回滚日志) 事务回滚、MVCC 记录数据修改前的版本,回滚用,实现多版本并发控制
    Binary Log(binlog) 主从复制、数据恢复 记录所有写操作,用于主从同步、数据备份
    Error Log(错误日志) 记录启动 / 运行错误 排查数据库故障
    Slow Query Log(慢查询日志) 记录慢 SQL 定位性能问题,优化慢查询
  3. 数据 / 索引文件

    • InnoDB 数据和索引存在 .ibd 文件中,MyISAM 分 .MYD(数据)和 .MYI(索引)。

二、存储引擎简介

sql

复制代码
-- 查看 MySQL 支持的所有存储引擎
SHOW ENGINES;

-- 查看某张表当前使用的存储引擎
SHOW CREATE TABLE account;

-- 建表时指定存储引擎
CREATE TABLE t1 (id INT, name VARCHAR(20)) ENGINE = InnoDB;
CREATE TABLE t2 (id INT, name VARCHAR(20)) ENGINE = MyISAM;
CREATE TABLE t3 (id INT, name VARCHAR(20)) ENGINE = Memory;

MySQL 支持十几种存储引擎,但实际开发中最常用的就是三种:InnoDB、MyISAM 和 Memory。


三、存储引擎特点

这是核心重点,三大引擎的特性对比:

关于文件结构 有个重要区别:InnoDB 把数据和索引放在同一个 .ibd 文件里(聚簇索引),而 MyISAM 把表结构、数据、索引分成三个独立文件存储。

InnoDB

每一个表都有一个xxx.ibd文件,二进制文件。

查看可以使用命令行 idb2sdi account.ibd; 查看二进制文件

idb2sdi.exe 文件在

InnoDB逻辑存储结构:

MYSIAM

MyISAM是MySQL早期的默认存储引擎

Memory
区别:

四、存储引擎选择

实际工作中,选择哪个引擎主要看业务需求:

用一句话总结选择原则:

  • InnoDB:只要涉及增删改、需要事务、有并发写入,就用 InnoDB。这是 99% 的业务场景的正确选择,也是 MySQL 5.5 之后的默认引擎。
  • MyISAM:纯读场景、日志归档、数据仓库查询。但现在 InnoDB 读性能也已经很强,MyISAM 的使用场景越来越少。
  • Memory:做临时缓存表、会话临时数据等,但不能持久化,重启就丢。实际上 MySQL 内部做排序和聚合时会自动创建内存临时表。

总结一览

特性 InnoDB MyISAM Memory
事务 支持 不支持 不支持
外键 支持 不支持 不支持
锁粒度 行锁 表锁 表锁
崩溃恢复 支持 数据丢失
索引 B+Tree 聚簇 B+Tree 非聚簇 Hash
持久化 磁盘 磁盘 内存
适合场景 通用(默认选择) 只读/读多写少 临时数据/缓存
相关推荐
云飞云共享云桌面2 小时前
8-10位研发3D(sw、ug、creo)画图如何共享一台工作站?
运维·服务器·网络·数据库·3d·电脑
TDengine (老段)2 小时前
TDengine IDMP 事件 —— 事件模板
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
一只大袋鼠2 小时前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
正在走向自律2 小时前
时序数据库选型指南:在数据洪流中寻找坚实的锚点
数据库·时序数据库·apache iotdb
wljt2 小时前
达梦数据库恢复数据
数据库·数据库开发
卓怡学长2 小时前
基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)
java·数据库·spring boot·tomcat·maven
ID_180079054732 小时前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库
reasonsummer2 小时前
【教学类-160-03】20260410 AI视频培训-练习3“豆包AI视频《孔子教育之旅》+豆包图片风格:中国风(平面图)”
数据库
曹牧2 小时前
oracle kv字符串转换为多行两列
数据库·oracle