InnoDB 优化建议
从锁机制的实现方面来说,InnoDB 的行级锁带来的性能损耗可能比表级锁要高一点,但在并发方面的处理能力远远优于 MyISAM 的表级锁 。这也是大多数公司的 MySQL 都是使用 InnoDB 模式的原因 。
但是,InnoDB 也有脆弱的一面,下面提出几个优化建议供大家参考:
- 尽可能让数据检索通过索引完成,避免 InnoDB 因为无法通过索引加行锁,而导致升级为表锁的情况 。换句话说就是,多用行锁,少用表锁 。
- 加索引的时候尽量准确,避免造成不必要的锁定影响其他查询 。
- 尽量减少给予范围的数据检索(间隙锁),避免因为间隙锁带来的影响,锁定了不该锁定的记录 。
- 尽量控制事务的大小,减少锁定的资源量和锁定时间 。
- 尽量使用较低级别的事务隔离,减少 MySQL 因为事务隔离带来的成本 。

文章插图
MySQL 数据库锁的思维导图
MySQL 的锁主要分为表级锁和行级锁 。MyISAM 引擎使用的是表级锁,针对表级的共享锁和排他锁,可以通过 concurrent_insert 和 low_priority_updates 参数来优化 。
InnoDB 支持表锁和行锁,根据索引来判断如何选择 。行锁有,行共享锁和行排他锁;表锁有,意向共享锁,意向排他锁,表锁是系统自己加上的;锁范围的是间隙锁 。遇到死锁,我们如何检测,恢复以及如何避免 。
MySQL 有四个事务级别分别是,读未提交,读提交,可重复读,串行化 。他们的隔离级别依次升高 。
通过隔离级别的设置,可以避免,脏读,不可重复读和幻读的情况 。最后,对于使用比较多的 InnoDB 引擎,提出了一些优化建议 。
作者:崔皓
简介:十六年开发和架构经验,曾担任过惠普武汉交付中心技术专家,需求分析师,项目经理,后在创业公司担任技术/产品经理 。善于学习,乐于分享 。目前专注于技术架构与研发管理 。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】
推荐阅读
- 邱毅在武夷山畅谈两岸共有的中国茶文化
- 神秘的海怪 世界十大海怪未解之谜
- 新开的淘宝店铺怎么做推广引流? 新手淘宝开店怎么引流推广
- 有人发现了外星人造访地球 已发现的外星生物
- 大孔雀蝶是欧洲最什么的蝴蝶 全欧洲最大的蝴蝶是什么蝴蝶
- 北苑贡茶,严苛的生产标准铸造品质好茶
- Linux的/etc/init.d详解
- 花里的蚂蚁怎么处理,蚂蚁对花草有没有害处
- 自媒体人常用的工具大全,15种自媒体工具,提升内容创作效率
- 自己搭建网站的必备常用软件你装了几个?
