您现在的位置是:亿华云 > IT科技
InnoDB,5项优秀实践
亿华云2025-10-09 09:02:46【IT科技】7人已围观
简介MySQL是目前互联网公司使用最广的数据库,InnoDB是MySQL使用最广的存储引擎,MyISAM和InnoDB的五项最佳实践,和大家聊聊,尽量多讲“为什么”。一、关于count(*)知识点:MyI
MySQL是项优秀实目前互联网公司使用最广的数据库,InnoDB是项优秀实MySQL使用最广的存储引擎,MyISAM和InnoDB的项优秀实五项最佳实践,和大家聊聊,项优秀实尽量多讲“为什么”。项优秀实
一、项优秀实关于count(*)
知识点:MyISAM会直接存储总行数,项优秀实InnoDB则不会,项优秀实需要按行扫描。项优秀实
潜台词是项优秀实,对于select count(*) from t; 如果数据量大,项优秀实MyISAM会瞬间返回,项优秀实而InnoDB则会一行行扫描。项优秀实
实践:数据量大的项优秀实表,InnoDB不要轻易select count(*),项优秀实性能消耗极大。
常见坑:只有查询全表的总行数,MyISAM才会直接返回结果,当加了where条件后,两种存储引擎的处理方式类似。
例如:t_user(uid, uname, age, sex);
uid PK age index select count(*) where age<18 and sex=F;查询未成年少女个数,两种存储引擎的处理方式类似,都需要进行索引扫描。
启示:不管哪种存储引擎,香港云服务器都要建立好索引。
二、关于全文索引
知识点:MyISAM支持全文索引,InnoDB5.6之前不支持全文索引。
实践:不管哪种存储引擎,在数据量大并发量大的情况下,都不应该使用数据库自带的全文索引,会导致小量请求占用大量数据库资源,而要使用《索引外置》的架构设计方法。
启示:大数据量+高并发量的业务场景,全文索引,MyISAM也不是最优之选。
三、关于事务
知识点:MyISAM不支持事务,InnoDB支持事务。
实践:事务是选择InnoDB非常诱人的原因之一,它提供了commit,rollback,崩溃修复等能力。在系统异常崩溃时,MyISAM有一定几率造成文件损坏,这是非常烦的。但是,云服务器事务也非常耗性能,会影响吞吐量,建议只对一致性要求较高的业务使用复杂事务。
画外音:Cant open file XXX.MYI. 碰到过么?
小技巧:MyISAM可以通过lock table表锁,来实现类似于事务的东西,但对数据库性能影响较大,强烈不推荐使用。
四、关于外键
知识点:MyISAM不支持外键,InnoDB支持外键。
实践:不管哪种存储引擎,在数据量大并发量大的情况下,都不应该使用外键,而建议由应用程序保证完整性。
五、关于行锁与表锁
知识点:MyISAM只支持表锁,InnoDB可以支持行锁。
分析:
MyISAM:执行读写SQL语句时,会对表加锁,所以数据量大,并发量高时,性能会急剧下降。 InnoDB:细粒度行锁,在数据量大,并发量高时,性能比较优异。实践:网上常常说,select+insert的业务用MyISAM,因为MyISAM在文件尾部顺序增加记录速度极快。服务器租用楼主的建议是,绝大部分业务是混合读写,只要数据量和并发量较大,一律使用InnoDB。
常见坑:
InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。
画外音:Oracle的行锁实现机制不同。
例如:
t_user(uid, uname, age, sex) innodb; uid PK 无其他索引 update t_user set age=10 where uid=1;命中索引,行锁。
update t_user set age=10 where uid != 1;未命中索引,表锁。
update t_user set age=10 where name=shenjian;无索引,表锁。
启示:InnoDB务必建好索引,否则锁粒度较大,会影响并发。
总结
在大数据量,高并发量的互联网业务场景下,对于MyISAM和InnoDB
有where条件,count(*)两个存储引擎性能差不多 不要使用全文索引,应当使用“外置索引”的设计方案 事务影响性能,强一致性要求才使用事务 不用外键,由应用程序来保证完整性 不命中索引,InnoDB也不能用行锁结论
在大数据量,高并发量的互联网业务场景下,请使用InnoDB:
行锁,对提高并发帮助很大 事务,对数据一致性帮助很大这两个点,是InnoDB最吸引人的地方。
【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】
戳这里,看该作者更多好文
很赞哦!(343)
相关文章
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 推荐 7 个学习 TypeScript 的宝库,2021 是时候给自己加薪了!
- API快速开发平台设计思考
- 偷师 Next.js:我学到的 6 个设计技巧
- 5、企业注册国内域名需要证件,其它情况一律不需要证件。
- 如何在 C# 8 中使用 模式匹配
- JVM性能调优实战:让你的IntelliJ Idea纵享丝滑
- 微服务模式下如何实现多模块并行构建发布
- 为什么说注册域名注意细节?哪些我们不能忽视?
- 一文搞懂参数传递原理