C++面试题集数据库

MySQL存储引擎InnoDB与MyISAM

2017-08-12  本文已影响73人  saviochen

MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但不提供事务支持,而InnoDB提供事务支持已及外部键等高级数据库功能。

1、MyISAM

每个MyISAM在磁盘存储成三个文件。文件以表名命名,以拓展名区分文件类型。

MyISAM表格可以被压缩,而且他们支持全文搜索。不支持事务,而且不支持外键。如果事务回滚将会造成不完全回滚,不具备原子性。在进行update时,进行锁表并发量相对较小。如果执行大量的select,MyISAM是更好的选择。

MyISAM的索引和数据是分开的,并且索引式有压缩的,能加载更多索引,内存使用率就对应提高了不少。InnoDB是索引和数据紧密捆绑的,没有使用压缩从而造成InnoDB比MyISAM体积庞大不少。

MyISAM缓存在内存是索引,而不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥优势越大。

2、InnoDB

这种类型是事务安全的。它支持外键。在update时表进行行锁,并发量相对较大。如果数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

3、详细对比(补充两者差别)

一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

三、InnoDB支持外键,MyISAM不支持

四、MyISAM是默认引擎,InnoDB需要指定

五、InnoDB不支持FULLTEXT类型的索引

六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表

七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%')

参考文献:
1、MySQL存储引擎InnoDB与Myisam的六大区别

上一篇下一篇

猜你喜欢

热点阅读