美文网首页
MySQL MyISAM和Innodb存储引擎的区别

MySQL MyISAM和Innodb存储引擎的区别

作者: 代码的搬运工 | 来源:发表于2020-02-05 13:56 被阅读0次

    (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文件里。

    相关文章

      网友评论

          本文标题:MySQL MyISAM和Innodb存储引擎的区别

          本文链接:https://www.haomeiwen.com/subject/cearxhtx.html