(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文件里。
网友评论