| 存储引擎 | InnoDB | MyISAM | 
|---|---|---|
| 文件存储结构 | .frm文件:存放表结构的定义信息 .ibd文件或.ibdata文件:存放InnoDB数据(数据和索引) 【独享表空间】每个表一个.ibd文件 【共享表空间】所有表使用一个.ibdata文件 | - .frm文件:存放表结构的定义信息 - MVD(MYData)文件:存储MyISAM表的数据 - MYI(MYIndex)文件:存储MyISAM表的索引相关信息 | 
| 事务 | 支持 | 不支持 | 
| 外键 | 支持 | 不支持 | 
| 索引 | 支持聚簇索引和非聚簇索引 | 仅支持非聚簇索引 | 
| 锁 | 支持表级锁和行级锁 | 仅支持表级锁,不适合高并发 | 
| 关注点 | 事务 | 性能 | 
| 表大小 | 大 | 小 | 
| 索引缓存 | 不仅缓存索引还缓存数据,内存大小对性能有非常大影响 | 仅缓存索引 | 
| 是否保存具体行数 | 否。 count(*)时需要全表扫描,效率低 | 是。内部有一个变量记录表的行数,效率高 | 
| 使用场景 | 1.数据增删改查都相当频繁(和支持的锁相关) 2.可靠性要求比较高,要求支持事务 | 1.频繁执行全表 count语句2.对数据进行增删改的频率不高,查询非常频繁(不需要回表) 3.没有事务 |