🗄️ MySQL 存储引擎全景图

深入理解 MySQL 支持的存储引擎及其特性对比

MySQL 主要存储引擎

InnoDB 默认引擎

MySQL 默认的存储引擎,支持事务、行级锁和外键,是大多数应用场景的首选。

  • 支持 ACID 事务
  • 支持行级锁
  • 支持外键约束
  • 支持崩溃恢复
  • 支持 MVCC
MyISAM legacy

MySQL 5.5 之前的默认引擎,不支持事务,但查询速度快,适合读密集型应用。

  • 支持全文索引
  • 支持空间索引
  • 表级锁
  • 不支持事务
  • 不支持外键
MEMORY 内存引擎

将数据存储在内存中,速度极快,但重启后数据丢失,适合临时数据。

  • 极高的读写速度
  • 支持哈希索引
  • 数据易失性
  • 表级锁
  • 适合临时表
CSV 文本存储

将数据存储为 CSV 格式文本文件,方便数据交换,但不支持索引。

  • CSV 格式存储
  • 方便数据导入导出
  • 不支持索引
  • 不支持分区
Archive 归档引擎

高度压缩的存储引擎,适合存储大量历史归档数据,只支持 INSERT 和 SELECT。

  • 高压缩比
  • 只支持 INSERT/SELECT
  • 支持行级锁
  • 不支持索引(除自增)
NDB Cluster 集群引擎

MySQL Cluster 的存储引擎,支持高可用性和分布式存储。

  • 分布式存储
  • 高可用性
  • 支持事务
  • 内存存储为主

存储引擎详细对比

特性 InnoDB MyISAM MEMORY CSV Archive NDB
事务支持 ✓ 支持 ✗ 不支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✓ 支持
锁机制 行级锁 表级锁 表级锁 表级锁 行级锁 行级锁
外键支持 ✓ 支持 ✗ 不支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✓ 支持
MVCC ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 △ 部分
崩溃恢复 ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✓ 支持
全文索引 ✓ 支持 (5.6+) ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✗ 不支持
空间索引 ✓ 支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✗ 不支持
哈希索引 ✗ 不支持 ✗ 不支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✓ 支持
数据缓存 ✓ 支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✓ 支持
索引缓存 ✓ 支持 ✓ 支持 ✓ 支持 ✗ 不支持 ✗ 不支持 ✓ 支持
压缩数据 ✓ 支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✓ 支持 ✗ 不支持
存储空间 较高 中等 (内存) 极低 较高
内存使用 极高
批量插入速度 中等 极高 中等
查询速度 中等 极高 中等
集群支持 △ 通过 Group Replication ✗ 不支持 ✗ 不支持 ✗ 不支持 ✗ 不支持 ✓ 原生支持
适用场景 OLTP、高并发 读密集型、报表 临时数据、缓存 数据交换 日志归档 高可用集群

存储引擎特征雷达图

雷达图展示了各存储引擎在不同维度上的表现(数值越大表示越好)

推荐使用场景

💳
电商订单系统
InnoDB

需要事务支持、高并发读写、外键约束,确保数据一致性

📊
数据仓库报表
MyISAM

以读为主,不需要事务,查询性能要求高,适合报表统计

🚀
会话管理
MEMORY

临时会话数据,读写频繁,重启可丢失,追求极致性能

📦
日志归档
Archive

大量历史日志,只追加不修改,需要高压缩比节省空间

🔄
数据导入导出
CSV

需要与其他系统交换数据,CSV 格式通用性强

🌐
分布式集群
NDB Cluster

需要高可用、无单点故障、分布式存储的场景

InnoDB 架构深度解析

MyISAM vs InnoDB 架构对比

MyISAM 架构

MyISAM 引擎 表定义文件 (.frm) 数据文件 (.MYD) 索引文件 (.MYI) 表级锁 无事务支持 全文索引

InnoDB 架构

InnoDB 引擎 Buffer Pool 数据缓存 索引缓存 自适应哈希索引 Redo Log 崩溃恢复 Undo Log 回滚、MVCC 行级锁 & 事务 ACID 支持 MVCC 并发控制 外键约束 表空间文件 (.ibd) 支持压缩、加密