MySQL InnoDB 和 MyISAM 有什么区别?
2025年12月19日
在 MySQL 5.5 版本之前,MyISAM 是默认存储引擎;5.5 版本之后,InnoDB 成为了默认的存储引擎。
表格对比
它们的主要区别如下:
| 特性维度 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | ✅ 完整支持(ACID) | ❌ 不支持 |
| 锁机制 | 行级锁(默认),支持较高并发 | 表级锁,并发受限 |
| 外键约束 | ✅ 支持 | ❌ 不支持 |
| 索引结构 | 聚簇索引(主键索引) | 非聚簇索引 |
| 数据与索引存储 | 数据文件即索引文件 | 数据与索引分离存储 |
| 缓存机制 | 数据和索引都缓存 | 仅缓存索引 |
| 数据恢复 | 支持崩溃后自动恢复 | 崩溃后易损坏 |
| 全文索引 | ✅ 5.6+支持(之前版本不支持) | ✅ 支持(较早版本) |
什么时候必须用 InnoDB?
当你的服务有如下需求,就必须使用 InnoDB 存储引擎:
- 有更新操作且需要并发控制;
- 数据不能丢失的关键业务;
- 需要事务保证的一致性场景;
- 表之间有外键关联;
什么时候可以考虑 MyISAM?
- 只读表或临时表,如数据快照;
- 读频率远高于写频率(100:1 以上);
- 不需要事务,可以接受数据不一致风险;
COUNT(*)操作非常频繁且表很大;- 磁盘空间紧张(MyISAM 压缩表节省空间);
