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