经常会被问到MyIsam与InnoDB的区别,以下是我自己的几点总结:
1. 如果对整表进行count(*),由于在存储过程中,MyIsam会对表行数进行存储,从而读取较快。而InnoDB会逐行扫描,费时较多。
2. MyIsam不支持事务,InnoDB支持事务(保持数据一致性)。
3. MyIsam不支持外键,InnoDB支持外键。
4. MyIsam只支持表级锁,InnoDB支持行级锁。
5. InnoDB索引和数据是存储在一起的,而MyIsam索引和数据是分开的,索引存储的是数据的地址。
6. MyIsam允许没有任何索引和主键的表存在。InnoDB如果没有主键或者非空唯一索引,就会生成一个6字节的主键。
7. MyIsam中主索引和辅助索引在结构上没有任何区别,只是主索引要求key唯一,而辅助索引的key可以重复。InnoDB的辅助索引data域存储的是相应记录主键的值而不是地址,也就是说,InnoDB的所有辅助索引都引用主键作为data域。(辅助索引检索:先检索辅助索引获取主键,然后用主键到主索引中检索获得数据)