InnoDB 和 MyISAM 的区别
事务方面
InnoDB支持事务,MyISAM不支持事务。这是Mysql将默认存储引擎从MyISAM变成InnoDB的重要原因之一
外键方面
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MyISAM会失败
索引层面
InnoDB是聚集(聚簇)索引,MyISAM是非聚集(非聚簇)索引。
MyISAM 支持 FULLTEXT 类型的全文索引。
InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好。
锁粒度方面
InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁。
一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。
这也是Mysql将默认存储引擎从MyISAM变成InnoDB的重要原因之一
硬盘存储结构
MyISAM在硬盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
- .frm 文件存储 表的定义
- 数据文件 的扩展名为 .MYD(MYData)
- 索引文件 的扩展名为 .MYI (MYIndex)
InnoDB存储引擎存储数据库数据,一共有两个文件(没有专门保存数据的文件)
- Frm文件:表的定义文件
- <