MyISAM和InnoDB
MyISAM
MyISAM
使用B+tree
作为索引结构,叶节点存放的是数据地址
。
MyISAM
不支持事务和外键。
MyISAM
是表锁,对数据库写操作时会锁住整个表,效率低。
MyISAM
支持全文索引。
MyISAM
设计结构简单,适合read密集
的表。
MyISAM
支持索引压缩,可以加载更多索引。
InnoDB
InnoDB
同样使用B+tree
作为索引结构,但是叶节点存储的是完整的数据
。
InnoDB
支持事务和外键,在发生故障时可以通过事务日志来回复数据库。
InnoDB
是行锁,只锁定一行数据,因此写操作很快。
InnoDB
不支持全文索引。
InnoDB
对于write和update密集
的性能更好(由于行级锁的原因)。
参考:http://*.com/questions/15678406/when-to-use-myisam-and-innodb
区别
叶节点数据存放的不同,指针和完整数据
是否支持事务和外键
设计的区别,适合读密集还是写密集
锁的区别,表锁和行锁(如果
InnoDB
不能确定扫描范围,则需要对全表锁定)是否支持全文索引
select count(*)
的区别,MyISAM
保存行数(如果由where
则扫描全表),而InnoDB
扫描全表