MyIsAm和 InnoDB 的 区别? 如何去选择?

区别:

  1.InnoDB支持事务,MyISAM不支持事务,InnoDB会为每条语句默认封装成事务支持,当多条语句执行时,可以放到 begin和commit中,进行执行;

  2.InnoDB支持外键,MyISAM不支持外键;

  3.InnoDB是聚焦索引,而MyISAM是非聚焦索引,但是它们都是B+ tree 数据结构

    不同的是,InnoDB中必须要有主键,数据文件和索引绑定在一起,通过主键索引查询数据,极大的提升了查询效率.而辅助索引则需要2次查询,首先查询到主键索引后,再查询数据

    而MyISAM中则是,数据结构和索引是分开的,索引保持的是数据文件的指针.

  4.InnoDB不保存表的具体行数,所以需要去进行全表扫描,而MyISAM是使用一个变量去保存的,所以读取的时候会非常快.

  5.InnoDB不支持全文索引,而MyISAM支持全文检索,在涉及全文索引领域上MyISAM,效率更高.PS:Mysql5.7以后支持全文索引

  6.MyISAM支持压缩表.

  7.InnoDB支持表、行(默认)级锁,而MyISAM支持表锁

    InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上. 如果没有命中索引的话,也会退化成表锁

  8.InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏Row_Id来充当默认主键),而MyIsAM则没有

  9.InnoDB存储文件有frm、ibd,而MyISAM是frm、MYD、MYI.

如何选择:

  1.是否要支持事务,如果要请选择InnoDB,如果不需要可以使用MyISAM.

  2.如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,使用InnoDB

  3.系统崩溃后,MyISAM恢复起来更困难,是否接受;

  4.MySQL5.5版本开始InnoDB已经成为MySQL的默认引擎(之前是MyISAM).

    如果你不知道如何选择,选择InnoDB

原文地址:https://www.cnblogs.com/zayr/p/14335057.html