MyISAM与InnoDB的区别?

  • InnoDB 支持事务;MyISAM 不支持事务
  • InnoDB 支持行级锁;MyISAM 支持表级锁
  • InnoDB 支持 MVCC(多版本并发控制);MyISAM 不支持
  • InnoDB 支持外键,MyISAM 不支持
  • MySQL 5.6 以前的版本,InnoDB 不支持全文索引,MyISAM 支持;MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引
  • InnoDB 不保存表的总行数,执行 select count(*) from table 时
    需要全表扫描;MyISAM 用一个变量保存表的总行数,查总行数速度很快
  • InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,
    通过主键索引效率很高。辅助索引需要两次查询,先查询到主键,再通过主键查询到数据。主键太大,其他索引也会很大;MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的

 

总结:

  • InnoDB 存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全,与 MyISAM 比 InnoDB 写的效率差一些,并且会占用更多的磁盘空间以保留数据和索引
  • MyISAM 不支持事务、也不支持外键,优势是访问的速度快。对事务的完整性没有要求、以 SELECT 和 INSERT 为主的应用可以使用这个存储引擎