MySQL的常用存储引擎InnoDb 和MyISAM 的区别

之前腾讯面试被问到了,回答的不好,因此自己好好总结一下,方便复习.

MySQL的两个常用存储引擎是InnoDb 和MyISAM,其中:

InnoDB(默认) :是事务优先的 ,因此适合高并发操作
MyISAM :        是性能优先的,因此查询性能会好一丢丢

他俩的主要区别是:

1.InnoDB支持事务,而MyISAM不支持事务.由于目前企业的应用中并发的情况非常普遍,所以这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

2. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。很简单,为了能够支持事务,保证事务的ACID特性,InnoDB 就必须支持更精细的行锁才行,所以高并发的情况下只能选择InnoDB;

3.InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。

但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4.InnoDB 支持外键,而MyISAM不支持,所以把原来带有外键 InnoDB 的数据库表转为 MYISAM 引擎会失败;
 
5.InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
 
如何选择存储引擎:
 
总的来说在没有高并发需求,并且表中绝大多数都只是读查询,可以考虑 MyISAM,其他时候都用InnoDB.
MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,性能并不比MyISAM差多少。
所以如果你不知道用什么存储引擎的话,那就用InnoDB吧,至少不会差。

MySQL的常用存储引擎InnoDb 和MyISAM 的区别

上一篇:Mybatis——动态SQL


下一篇:java&oracle日期查询