MySQL存储引擎选择InnoDB还是MyISAM

本文对比了MyISAM和InnoDB两种MySQL存储引擎的特点和适用场景。MyISAM适用于读取和插入操作为主的环境,而InnoDB则更适合事务处理和数据一致性的需求。通过实际案例展示了不同业务场景下引擎的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

23162924_yBnw.jpg

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.youkuaiyun.com/article/2012-09-06/2809618-mysql-vs-mongodb-complete

磁盘空间占用(有索引时候的占用,无索引情况差不多): 同样的100万条记录

MySQL MyISAM:57MB

MySQL InnoDB:264MB

MongoDB:464MB

转载于:https://my.oschina.net/u/1269381/blog/844862

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值