MySQL中有两种常用的数据库引擎,分别为InnoDB和MyISAM,简单讲一下两者的区别以及如何去选择两种引擎。
区别:
1、InnoDB支持事务,MyISAM不支持
对于InnoDB中的每一条SQL都默认封装成事务,自动提交,这样会影响速度,所以把多条SQL放在begin和commit之间组成一个事务。
2、InnoDB支持行级锁和外键,MyISAM不支持
对⼀个包含外键的InnoDB表转为MYISAM会失败
3、InnoDB是聚集索引,MyISAM是非聚集索引
InnoDB数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后通过主键查询到数据。因此主键不应该过大,因为主键过大,其他索引也都会很大。
MyISAM数据文件和索引是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
4、Select count(*) from table
InnoDB不保存表的具体行数,所以执行Select count(*) from table指令时需要进行全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述指令时只需要读出该变量即可,不需要进行全表扫描,速度很快。
5、InnoDB不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高一些。
如何选择:
-
看是否需要支持事务,如果需要则请选择InnoDB,如果不需要则可以考虑MyISAM。
-
如果表中绝大多数都只是读查询,可以考虑MyISAM,如果读写比较频繁,则优先考虑InnoDB。因为MyISAM不提供对事务的支持,也不支持行级锁和外键,所以当执行insert和update语句时会先锁定这个表,会导致效率降低。
-
表数据量比较大时应优先选择InnoDB,因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复,主键的查询在Innodb也是比较快的。
-
MySQL5.5版本开始它的默认引擎已经改为InnoDB(之前是MyISAM),说明其优势是有目共睹的。