当前位置: 首页 > ai >正文

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

一、MySQL 执行引擎

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

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

引擎名称是否支持事务是否支持行级锁是否支持外键索引类型特点简述适用场景
InnoDBB+ 树、全文索引等默认引擎,支持事务、崩溃恢复、行锁,多版本控制 (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
http://www.xdnf.cn/news/14409.html

相关文章:

  • Google机器学习实践指南(非线性特征工程解析)
  • 人工智能学习37-Keras手写识别预测
  • 对于数据库触发器自动执行的理解
  • Java类的继承
  • Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头
  • BeckHoff <---> Keyence (MD-X)激光 刻印机 Profient 通讯
  • Elasticsearch:什么是混合搜索?
  • AIGC 基础篇 高等数学篇 06 向量代数与空间解析几何
  • 人月神话-学习记录
  • SQL Developer 表复制
  • Python安装与使用教程
  • Maven在依赖管理工具方面的内容
  • Java多线程通信:wait/notify与sleep的深度剖析(时序图详解)
  • Spring是如何实现有代理对象的循环依赖
  • 【SQLAlchemy系列】 SQLAlchemy 中的多条件查询:or*与 in*操作符
  • 智能土木通 - 土木工程专业知识问答系统02-RAG检索模块搭建
  • AC耦合与DC耦合
  • 体验AI智能投资!AI Hedge Fund了解一下
  • Java可变参数方法的常见错误与最佳实践
  • hyper-v虚拟机使用双屏
  • iOS —— UI(2)
  • Spring Cloud 所有组件全面总结
  • 「AI大数据」| 智慧公路大数据运营中心解决方案
  • Java类加载器与双亲委派模型深度解析
  • DNS递归查询
  • BOLL指标
  • Oracle21cR3之客户端安装错误及处理方法
  • 第11章 结构 笔记
  • 华为OD-2024年E卷-小明周末爬山[200分] -- python
  • 亚马逊ASIN: B0DNTQ2YNT数据深度解析报告