Mysql中MyISAM和InnoDB的区别

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),说明其优势是有目共睹的。

 

你可能感兴趣的:(数据库,mysql,索引,数据库)