MySQL MyISAM VS InnoDB

总结MyISAM与InnoDB的区别。

MyISAM

MyISAM使用B+tree作为索引结构,叶节点存放的是数据地址

MyISAM不支持事务和外键。

MyISAM是表锁,对数据库写操作时会锁住整个表,效率低。

MyISAM支持全文索引。

MyISAM设计结构简单,适合read密集的表。

MyISAM支持索引压缩,可以加载更多索引。

InnoDB

InnoDB同样使用B+tree作为索引结构,但是叶节点存储的是完整的数据

InnoDB支持事务和外键,在发生故障时可以通过事务日志来回复数据库。

InnoDB是行锁,只锁定一行数据,因此写操作很快。

InnoDB不支持全文索引。

InnoDB对于write和update密集的性能更好(由于行级锁的原因)。

参考:http://stackoverflow.com/questions/15678406/when-to-use-myisam-and-innodb

区别

  • 叶节点数据存放的不同,指针和完整数据

  • 是否支持事务和外键

  • 设计的区别,适合读密集还是写密集

  • 锁的区别,表锁和行锁(如果InnoDB不能确定扫描范围,则需要对全表锁定)

  • 是否支持全文索引

  • select count(*)的区别,MyISAM保存行数(如果由where则扫描全表),而InnoDB扫描全表