数据库教程:阿里规范不建议多表Join,可这SQL要怎么写?

阿里开发手册的描述,禁止多表join: 手册上写着【强制】,相信很多同学项目里面的代码都不满足这个要求。 但是关键问题是:不用join,这SQL究竟要怎么写?! 分解关联查询 即对每个要关联的表进行单表查询,然后将结果在应用程序中进行关联。下面的这个查询: 可以分解成下面这些查询来代替: 但是该方案 …

阿里开发手册的描述,禁止多表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要怎么写?来自> 阿里规范不建议多表join,可这sql要怎么写啊?

需要了解更多数据库技术:阿里规范不建议多表Join,可这SQL要怎么写?,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article 数据库教程:阿里规范不建议多表Join,可这SQL要怎么写?

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/628240.html

(0)
上一篇 2021年5月30日 上午7:49
下一篇 2021年5月30日 上午7:52

精彩推荐