- 默认。MySQL现在默认存储引擎是InnoDB;5.5之前默认使用MyISAM。
- 事务。InnoDB支持事务;MyISAM不支持事务。
- 索引。InnoDB的索引和数据是一体的,聚簇索引的B+树叶子节点上存储数据,非聚簇索引的叶子节点上存储主键;MyISAM的索引与数据是分开的,所有索引的叶子节点上存储的都是指向数据文件的指针。
- 锁。InnoDB的最小的锁的粒度是行锁;MyISAM支持的最小粒度的锁是表锁。
- 外键。InnoDB支持外键;MyISAM不支持外键。
- 计数。InnoDB在执行count()时需要遍历整张表;MyISAM会维护一个表中数据条数的变量。
- 应用场景。InnoDB主要应用于需要事务支持,修改较为频繁的场景。MyISAM在查询和计数需求比较多的场景下性能较好。
对于查询需求:
MyISAM没有回表操作。而且MyISAM不需要维护MVCC。
总结:
- InnoDB适合修改操作频繁和支持事务的场景。
- MyISAM适合查询和计数频繁的场景。