MySQL 五种存储引擎详解及对比

MySQL 五种存储引擎详解及对比

1. InnoDB

特点

  • MySQL 5.5+ 后的默认存储引擎
  • 支持事务处理(ACID 兼容)
  • 实现行级锁定(并发性能好)
  • 支持外键约束
  • 提供崩溃恢复能力
  • 使用MVCC(多版本并发控制)
  • 数据存储在表空间中(可配置为每表单独文件)
  • 支持热备份

适用场景

  • 需要事务支持的应用程序
  • 高并发读写操作
  • 需要外键约束的应用
  • 大多数 OLTP(在线事务处理)系统

2. MyISAM

特点

  • MySQL 5.5 之前的默认引擎
  • 不支持事务
  • 使用表级锁定(并发性能较差)
  • 支持全文索引(FULLTEXT)
  • 较高的读取速度
  • 存储由**.MYD**(数据)和**.MYI**(索引)文件组成
  • 支持压缩表(只读)
  • 支持空间数据类型

适用场景

  • 读密集型应用
  • 不需要事务的简单应用
  • 数据仓库或报表系统
  • 需要全文索引的应用(MySQL 5.6 前)

3. MEMORY (HEAP)

特点

  • 所有数据存储在内存
  • 极快的访问速度
  • 使用表级锁定
  • 不支持BLOB/TEXT类型
  • 服务器重启后数据丢失
  • 默认使用哈希索引(也支持B树索引)
  • 表大小受max_heap_table_size参数限制

适用场景

  • 临时数据存储
  • 缓存中间结果
  • 需要极快访问速度的查找表
  • 会话管理等临时数据

4. NDB (Cluster)

特点

  • MySQL 集群存储引擎
  • 高可用性设计(自动分片和复制)
  • 数据存储在内存中(可配置为磁盘存储)
  • 支持事务
  • 支持行级锁定
  • 需要NDB Cluster环境
  • JOIN操作性能较差
  • 适合分布式计算环境

适用场景

  • 需要99.999%可用性的应用
  • 电信、实时计费系统
  • 需要线性扩展的高负载应用
  • 分布式数据库环境

5. ARCHIVE

特点

  • 专为高压缩比设计(比MyISAM小75%)
  • 只支持INSERTSELECT操作
  • 不支持索引(主键除外)
  • 不支持更新/删除
  • 使用行级锁定
  • 数据压缩后存储,读取时解压
  • 适合只追加的数据

适用场景

  • 日志和审计数据
  • 历史归档数据
  • 很少访问的大量数据存储
  • 数据仓库的底层存储

五种引擎对比表

特性 InnoDB MyISAM MEMORY NDB ARCHIVE
事务支持
锁粒度 行锁 表锁 表锁 行锁 行锁
外键
全文索引 ✅(5.6+)
存储位置 磁盘 磁盘 内存 内存/磁盘 磁盘
崩溃恢复
压缩 表压缩 压缩表(只读) 极高压缩
并发性能 极高
持久性 持久 持久 非持久 可配置 持久
典型用途 OLTP 读密集型 缓存/临时表 集群 归档数据

选择建议

  1. 常规Web应用:InnoDB(默认选择)
  2. 只读或读多写少:MyISAM(考虑迁移到InnoDB+从库)
  3. 临时数据处理:MEMORY
  4. 电信级高可用:NDB Cluster
  5. 日志归档:ARCHIVE