您的位置:首页 > 数据库 > MySQL

MySQL存储引擎选择InnoDB还是MyISAM

2017-02-23 00:00 781 查看


MyISAM:主要以读操作和插入操作为主,只是很少的更新和删除操作,并且对事务的完整性,并发性要求不高,选择这个存储引擎比较合适。还是在web、数据仓储和其他应用环境下最常用的的存储引擎之一。

InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多更新,删除操作,那么InnoDB应该是比较适合的选择。

InnoDB存储引擎提供了具有提交,回滚和崩溃恢复能力的事务安全。对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。

个人猜测:在insert时,MyISAM并不是实时写入磁盘的,而是经过缓存的。InnoDB则是实时写入磁盘,且记录成功写入后会追加一个结束标记,后一次的写入会检查上一次写入数据的完整性,查询时也会检查数据的完整性。直接绕过文件系统缓存和磁盘缓存。

案例:

1.一公司都是以资讯内容为主,当时也在选择引擎的时候犯难,最后我们直接拿几百万的数据来测试,发现还是MyIsam比较合适,当时的测试版本是5.5的。

2.一公司一开始用的MyIsam做人口系统,因为数据清洗与迁移方便,但是在后期中出现的锁表问题很头疼,就换成了InnoDB,仅供参考 。

3. 商城的订单的表是InnoDB类型的,因为订单一旦生成失败,就不提交事物,那么插入的数据就不生效,这样大大减少了垃圾数据 。

select count(*) 和order by 这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。
MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了

相关测试
http://www.oschina.net/question/23734_10930?sort=default&p=2 http://www.csdn.net/article/2012-09-06/2809618-mysql-vs-mongodb-complete
磁盘空间占用(有索引时候的占用,无索引情况差不多): 同样的100万条记录

MySQL MyISAM:57MB

MySQL InnoDB:264MB

MongoDB:464MB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: