暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL JOIN表不推荐超过3个

原创 小气鬼 2022-07-07
2646

      能够同时被InnoDB代码处理的SQL语句默认同时只能有16个,在此期间,其它SQL都处于等待或挂起状态。某些性能消耗非常大的SQL可以直接造成数据库主从长时间延迟、主从中断、甚至实例CRASH等。

      性能消耗过大的sql本身执行时间长,其实也就是资源占用时间长,会造成集群并发能力低下。在业务流量突增(业务本身或网络抖动都可能导致)等情况下,容易造成SQl堆积、并发超过限制等,从而影响到业务正常运行。而联合查询过多张表,正是这种情况的常见案例。 所以,其实不只是join不超过3张表,其它诸如在一个SQl语句用使用if,各种复杂函数、各种判断、多层子查询嵌套等等的长语句,都是不被推荐的。一个业务,使用简单的SQl语句,使用数据库最简单的增、删、改、查功能,从而让数据库处于一种可预估,可扩展,可控的状态。我们来衡量一个业务SQL写的是否优秀,其关键点是这个业务的SQl是否在合理范围内足够的简单。这个合理的范围指的是随着业务及数据的增长,SQL本身的性能消耗不大且不会有大的变化,不会占用过多的cpu或io时间。比如一个根据主键查询的语句,一行数据与一千万行数据不会有太大的变化。业务可以很好的在此基础之上预估当前流量要增加比如N倍的情况下,数据库应就当如何扩容并能确保数据库可以支撑.但如果业务中复杂语句过多,性能消耗又大,数据库可能就只因为偶尔的或是前端的,或是网络的,可是数据库本身的波动导致SQl堆积、实例并发增长,业务受到影响。复杂的SQl会让集群处于一种性能波动明显,并发能力低,业务可能不可控的状态。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论