MySQL MyISAM和Innodb存储引擎的区别

(1)InnoDB支持事务,MyISAM不支持事务。 

(2)InnoDB支持行锁也支持表锁,MyISAM支持表锁。

注:InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率高,并发量低。

行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发量高。

(3) InnoDB支持外键,MyISAM不支持外键。

注:对一个包含外键的InnoDB表转为MyISAM表会失败。 

(4)Innodb不支持全文索引,而MyISAM支持全文索引。

注:MySQL 5.7以后的InnoDB支持全文索引。

(5)MyISAM表可以被压缩,InnoDB表不能被压缩。

(6)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

(7)InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。如果添加where条件,那么执行效率一样。

(8)MyISAM创建表生成三个文件:.frm(数据表结构)、.myd(数据文件)、.myi(索引文件),Innodb只生成一个 .frm文件,数据和索引存放在.ibd文件里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容