第 43.1 节:ENGINE=MyISAM
CREATE TABLE foo (
...
) ENGINE=MyISAM;
第 43.2 节:MyISAM 的核心特性
| 特性 | 说明 |
|---|---|
| 事务支持 | ❌ 不支持事务,无 ACID 保证 |
| 外键约束 | ❌ 不支持外键 |
| 锁粒度 | 表级锁(读写互斥,写操作会阻塞所有读写) |
| 崩溃恢复 | 非事务性,崩溃后数据可能损坏,需要手动修复(repair table) |
| 全文索引 | ✅ 支持全文索引(MyISAM 是早期 MySQL 中唯一支持全文索引的引擎) |
| 压缩表 | ✅ 支持 myisampack 压缩只读表,大幅减少存储空间 |
| 存储结构 | 每张表对应三个文件:.frm(表结构)、.MYD(数据)、.MYI(索引) |
| 计数优化 | SELECT COUNT(*) 无 WHERE 条件时,直接返回总行数(O(1)) |
| 并发插入 | 支持并发插入(在表末尾插入数据时,不阻塞读操作) |
| 空间索引 | 支持地理空间索引(R-tree) |
第 43.3 节:MyISAM 的适用场景(历史原因)
- 只读或读多写少的应用(如数据仓库、日志报表、归档历史表)
- 不需要事务和外键的场景
- 全文搜索需求(但 MySQL 5.6+ 的 InnoDB 也支持全文索引)
- 空间数据(GIS) 需要 R-tree 索引时
- 临时表(MySQL 内部可能在内存或磁盘上使用 MyISAM)