数据库学习(七)——MySQL执行引擎

一、MySQL 执行引擎

在 MySQL 中,执行引擎(存储引擎,Storage Engine) 是数据库的核心组件之一,负责数据的存储、检索、更新、删除等底层实现。

MySQL 中几种常见的执行引擎:

引擎名称 是否支持事务 是否支持行级锁 是否支持外键 索引类型 特点简述 适用场景
InnoDB B+ 树、全文索引等 默认引擎,支持事务、崩溃恢复、行锁,多版本控制 (MVCC) 高并发写事务场景
MyISAM ❌ (表锁) B+ 树、全文索引等 读性能好,占用资源少,但不支持事务和行锁 只读场景、日志分析
Memory ❌ (表锁) 哈希索引、B+ 树索引可选 数据存储在内存中,速度快,重启即丢数据 缓存临时数据、排序中间结果
CSV 每个表一个 .csv 文件,便于导入导出 简单数据交换场景
Archive 无或极简索引 高压缩比,适合只写不读的归档数据 日志归档、历史数据
Federated 依赖远程端索引 查询远程服务器上的表,类似数据库间连接 跨库查询
NDB(Cluster) 哈希、B+树 分布式存储,适用于 MySQL Cluster,高可用、高冗余 高可用集群部署

二、执行引擎分类

1. InnoDB(默认)

  • 支持事务:ACID、两阶段提交;
  • 支持 MVCC:多版本并发控制;
  • 支持外键:唯一支持外键约束的引擎;
  • 行级锁:减少锁冲突,适合并发;
  • Crash-safe:配合 redo logundo log
  • B+ 树索引聚簇索引(主键)+ 二级索引

适用于大多数业务系统,尤其是有事务需求、并发高的 OLTP 系统。

2. MyISAM

  • 不支持事务和外键
  • 表级锁读取快,但写入竞争大;
  • 压缩表支持:MyISAM 表可以压缩,提高存储效率;
  • 全文索引支持早:在老版本 MySQL 中早于 InnoDB 支持全文索引。

适用于以读为主的报表系统或数据仓库,但已逐渐被 InnoDB 替代。

3. Memory(Heap)

  • 数据存储在内存中
  • 速度极快,但 断电/重启即丢数据
  • 仅表级锁
  • 默认使用 哈希索引,也可改为 B+ 树。

适用于临时表、排行榜、会话数据等不需要持久化的高速读写场景

4. Archive

  • 只支持 INSERTSELECT
  • 高压缩比、低存储开销
  • 不支持索引或只支持 minimal 索引。

适用于日志归档、审计数据存储等写多读少的业务。

5. Federated

  • 表数据存在远程服务器;
  • 本地仅存连接信息,查询时连接远端执行;
  • 不支持事务、索引依赖远程库。

适用于简单跨数据库查询,但存在网络延迟和维护问题。

三、查看和指定执行引擎

查看当前表的执行引擎:

SHOW TABLE STATUS WHERE Name = 'your_table';

SHOW CREATE TABLE your_table;

指定表的执行引擎:

CREATE TABLE example (
  id INT PRIMARY KEY,
  name VARCHAR(50)
) ENGINE = InnoDB;

四、执行引擎工作流程

在 MySQL 中,执行引擎(准确说是存储引擎)的工作流程是在语法层、优化层处理完后,如何真正与底层数据交互、执行具体操作的过程。

1. SQL 执行整体流程(与执行引擎的关系)

客户端 SQL -> 连接层 -> 分析器 -> 优化器 -> 执行器 -> 执行引擎(存储引擎) -> 磁盘数据

执行引擎是在执行器调度下,真正执行对数据的增删改查操作的底层组件

2. 执行引擎工作流程(以 InnoDB 为例)

以查询语句为例:

SELECT * FROM users WHERE id = 1;

执行引擎处理流程如下图所示:

┌──────────────────────────┐
│         执行器            │ ← 解析SQL后决定使用 InnoDB
└────────────┬─────────────┘
             ↓
┌──────────────────────────┐
│     InnoDB 执行引擎       │ ← 执行器调用接口,如 row_search_for_mysql()
├──────────────────────────┤
│ 1. 检查 Buffer Pool       │ ← 内存中是否已有页(缓存)
│ 2. 否 → 读取磁盘页 → 缓存  │
│ 3. 扫描索引(如 B+ 树)    │ ← 聚簇索引/辅助索引
│ 4. 返回数据行             │
└──────────────────────────┘

五、InnoDB 执行引擎模块

模块 功能说明
Buffer Pool 内存缓存页:索引页、数据页、undo页;优先读取缓存,未命中则从磁盘读入
索引管理器 支持聚簇索引(主键)和二级索引(普通索引);B+树结构快速定位
事务管理器 支持 ACID,管理 Redo LogUndo Log;控制 MVCC 和锁
锁管理器 提供行级锁、意向锁、Gap锁、Next-key锁等
日志管理器 Redo Log(恢复),Undo Log(回滚、MVCC),Binlog(复制)
文件管理器 管理表空间、页文件、数据页读写;协调磁盘I/O

六、不同操作的执行流程

1. 查询(SELECT)

SELECT * FROM users WHERE id = 1;

流程如下:

  1. 执行器调用 InnoDB;
  2. 查找 Buffer Pool(缓存页)
  3. 若无,磁盘读取页;
  4. 使用聚簇索引/二级索引定位记录;
  5. 返回数据 + 记录一致性读版本(MVCC);

若是 FOR UPDATE 则获取排他锁。

2. 插入(INSERT)

INSERT INTO users (name) VALUES ('Alice');

流程:

  1. 构造记录 → 写 Buffer Pool;
  2. 记录 Undo Log用于回滚);
  3. Redo Logprepare);
  4. 提交时写 Binlog + Redo commit
  5. 后台刷脏页到磁盘。

3. 更新/删除(UPDATE / DELETE)

流程类似插入,区别在于:

  • 扫描行 → 检查可见性(MVCC);
  • 修改时生成 Undo 版本
  • 并在提交前记录 redobinlog

你可能感兴趣的:(数据库学习,数据库,学习,mysql)