第 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)