dbaplus社群 2024年12月12日
为什么 MySQL 不推荐使用 join?
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了在MySQL数据库中不推荐使用子查询和JOIN的原因,特别是在处理大规模数据时,JOIN的效率问题尤为突出。文章提倡采用应用层关联的方式,即通过单表查询并在应用程序中合并数据,从而提高效率。这种方法不仅能提升缓存效率、减少锁竞争,还能增强数据库的可扩展性和查询效率。同时,作者也指出了应用层关联的适用场景,并解释了为何不推荐JOIN,以及如何在业务层实现不使用JOIN的解决方案。

🔍文章指出,当数据量庞大时,MySQL中的JOIN操作效率低下,成为性能瓶颈。这是因为JOIN操作涉及复杂的数据匹配和合并过程,消耗大量计算资源。

💡采用应用层关联可以显著提高缓存效率。单表查询的结果易于缓存,而涉及多表的JOIN查询在任一关联表更新时都需重新计算,降低了缓存的有效性。

🚀应用层关联有助于减少数据库锁竞争。单表查询操作简单,锁定资源少,而JOIN操作可能涉及多个表的锁定,增加了锁冲突的风险。

📈在应用层执行数据关联便于数据库的拆分和扩展。这种方式使得系统更容易适应分布式架构,提升了整体的性能和可伸缩性。

🛠️文章还提到了不使用JOIN的解决方案,即在业务层进行单表查询,并将结果作为条件传递给下一个查询。这种方法虽有SQL长度限制,但可通过调整`max_allowed_packet`参数和业务逻辑优化来解决。

洛神灬殇 2024-12-12 07:15 广东

不推荐使用子查询和join,是因为本身join的效率就是硬伤……

分享概要

一、应用层关联的优势

二、应用层关联的使用场景

三、不推荐使用join的原因

四、不使用join的解决方案

五、join查询的优势


对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。


子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。


如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。


数据库是最底层的,瓶颈往往是数据库。建议数据库只是作为数据store的工具,而不要添加业务上去。


一、应用层关联的优势


让缓存的效率更高。许多应用程序可以方便地缓存单表查询对应的结果对象。如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。



二、应用层关联的使用场景



三、不推荐使用join的原因





四、不使用join的解决方案


在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是子查询。会担心子查询出来的结果集太多。mysql对in的数量没有限制,但是mysql限制整条sql语句的大小。


通过调整参数max_allowed_packet ,可以修改一条sql的最大值。建议在业务上做好处理,限制一次查询出来的结果集是能接受的。


五、join查询的优势


关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去in它。


但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为sql本身长度有限。




作者丨洛神灬殇

来源丨网址:cnblogs.com/liboware/p/12740901.html

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


活动推荐



今晚19:00-21:00,dbaplus社群联合华为存储团队围绕《迈入深水区!国产数据库存算分离架构技术创新与实践演进》开展线上分享。议题抢先看,点击下方链接预约直播~




跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

数据库优化 JOIN查询 应用层关联 MySQL 性能提升
相关文章