尽管 MyISAM 相比 InnoDB 功能较弱(不支持事务、行级锁、外键等),但它仍然有一些特定场景下的优势和使用理由。以下是为什么 MyISAM 仍有人使用 的原因:
✅ 1. 读性能更高(在特定条件下)
- MyISAM 使用 表级锁,适合 读多写少 的场景(如 CMS、博客、文档系统等)。
- 没有事务和日志开销,单次查询速度可能快于 InnoDB。
- 支持 压缩表(MyISAM Compressed Tables),节省空间、加快查询。
✅ 2. 占用资源更少
- 相比 InnoDB,内存消耗更小,适合低配服务器或嵌入式环境。
- 结构简单,不需要维护复杂的缓存系统(如 buffer pool、redo/undo log)。
✅ 3. 支持全文索引(老版本优势)
-
在 MySQL 5.6 之前,MyISAM 是唯一支持 FULLTEXT 索引的引擎。
CREATE TABLE articles (
id INT,
content TEXT,
FULLTEXT(content)
) ENGINE=MyISAM;
✅ 4. 表结构清晰、迁移方便
- 数据、索引、结构分别存储为
.MYD
, .MYI
, .frm
文件,可直接拷贝表文件迁移。
- 不像 InnoDB 那样依赖共享表空间和日志文件。
✅ 5. 启动恢复速度快(代价是容易丢数据)
- 没有事务日志,所以数据库崩溃后不需要恢复过程,启动更快。
- 适合对数据一致性要求不高的场景。
❗ 使用 MyISAM 的风险
问题 |
说明 |
❌ 数据可能丢失 |
崩溃时可能只写了部分数据 |
❌ 写操作冲突严重 |
表级锁会阻塞并发写入 |
❌ 无事务和回滚功能 |
不适合复杂业务逻辑 |
❌ 不支持外键 |
无法强制引用完整性 |
推荐:不再默认使用 MyISAM
- 从 MySQL 5.5 开始,默认存储引擎变为 InnoDB。
- Oracle/MySQL 官方也推荐新项目使用 InnoDB。
- 如果你不是特意优化性能或处理老项目,一般不建议选 MyISAM。
总结一句话
MyISAM 仍然适用于“读多写少、数据可丢失”的轻量级应用,但在现代开发中已逐渐被 InnoDB 替代。