文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

阿里规范不建议多表Join,可这SQL要怎么写?

2019-04-10 08:33

关注

阿里开发手册的描述,禁止多表join:

阿里规范不建议多表Join,可这SQL要怎么写?

手册上写着【强制】,相信很多同学项目里面的代码都不满足这个要求。

但是关键问题是:不用join,这SQL究竟要怎么写?!

分解关联查询

即对每个要关联的表进行单表查询,然后将结果在应用程序中进行关联。下面的这个查询:

SELECT * FROM tag 
JOIN tag_post ON tag_post.tag_id=tag.id 
JOIN post ON tag_post.post_id=post.id 
WHERE tag.tag = "mysql";

可以分解成下面这些查询来代替:

SELECT * FROM tag WHERE tag = "mysql";
SELECT * FROM tag_post WHERE tag_id = 1234;
SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);

但是该方案也会有很明显的问题,就是in后面的参数可能会过多,可见这个方案的通用性其实非常有限。

打破范式标准

建议建表的时候,就把这些列放在一个表里,比如一开始有student(id, name),class(id, description),student_class(student_id, class_id)三张表,这样是符合数据库范式的(第一范式,第二范式,第三范式,BC范式等),没有任何冗余,但是马上就不符合“编程规范“了,那我们可以用一张大表代替它,student_class_full(student_id, class_id, name, description),这样name和description可能要被存储多份,但是由于不需要join了,查询的性能就可以提高很多了。

任何的规范都是在特定情况下的某种妥协,脱离了这个环境,就不一定成立了。

需要说明的是,这种脱离范式的设计,是互联网业务在设计高并发表时惯用的做法!

具体问题具体分析

最后,建议具体问题具体分析,即使多表Join在阿里规范是强制不允许的,但比如在管理后台这类并发量很低的业务场景下,依然是可以进行多表Join操作的!

多表Join并不一定是很Low的做法,在错误场景下多表Join才是很Low的做法!

本文来自木庄网络博客> 阿里规范不建议多表Join,可这SQL要怎么写啊?

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯