首页 新闻 会员 周边

大家觉得SQL中可以缺少join吗?

0
悬赏园豆:5 [已解决问题] 解决于 2016-12-22 09:20

之前有个同事是从阿里出来的,

他的框架或SQL中从不带join

 

如果要关联查询AB表时,先查询A表,

然后从结果集获取与B表关联的ID,

再拼装这些ID放入B表中做为in条件。(或者for去查N次数据库,根据ID去查B表)。

 

现在问题来了:

1,大家觉得是用in查还是for去查N次好?B表的ID一般是主键的。如果启用了数据库连接池,是不是用for去查N次还比in去查快?(不用打开和关闭N次链接)

 

2,我们问他为什么不用join,而要这样去查(因为我们之前会join两三个表,可能最多有5个左右),他说了以下几个原因:

 

A,在表的数据量小时,用join查感觉不到什么耗时,但是数据量大了以后,用join去查是非常耗时的。

 

B,这样写以后维护方便,看别人一大串SQL是很头疼的事。

 

我觉得A倒是很重要啊,但如果真是这样,SQL中干嘛要有join关键字呢?

 

想问题下大家,在数据量很大的时候,你们是怎么取数据的?大家都来说说自己的意见。

 

 

 

 

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2016-12-20 14:08
< >
分享
最佳答案
0

join的前提是外键.其实总的来说join还是性能更好的.因为join之前会先过滤主表.再join和过滤查询出来再in id是一样的.

我是觉得维护方便才是最重要的!一般的orm join都很费劲.所以我也不喜欢写join

而且手写sql最大的问题不是代码.而是猪队友.你不约束他.他什么都干的出来.

PS:in绝对比for循环查不知道要块多少.

收获园豆:4
吴瑞祥 | 高人七级 |园豆:29449 | 2016-12-20 14:14

谢谢你,再问一下假如表有上千万条数据时,join会不会要等很久很久啊。。。

hexllo | 园豆:318 (菜鸟二级) | 2016-12-20 14:22

@hexllo: 不会的.你做查询不可能查询这么多出来.这种需求本身就有问题.

一般都是查询几条几十条的.join也是join这过滤后的部分.

但有的人join是全join然后再过滤.就会有问题.但问题也不会很大的.

只能说join确实是少用或不要用.多用单表操作.尽量用id操作.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-20 14:42
其他回答(6)
0

这个要看你的A表查出来的数据有多少,我也不用join 一般写存储过程,合并两个表

createchina | 园豆:202 (菜鸟二级) | 2016-12-20 14:28
0

我的代码里也没有join。拿出符合的A数据集。再用ID集去B表查。速度快很多,ID一般都做为主键 是默认索引。条件查询中,查主键速度比其它字段快不知多少倍

盟怀部孩 | 园豆:878 (小虾三级) | 2016-12-20 16:01
0

我新欢join,不觉得慢

悦光阴 | 园豆:2251 (老鸟四级) | 2016-12-20 19:59
0

查询速度的快慢和使用in还是使用join没有绝对联系,和查询计划使用的索引才有关系,如果A表和B表是由多列组成的外键,使用in查询一样是慢。而且使用in查询,你最终还是要在内存上匹配对应的数据


Poseur | 园豆:216 (菜鸟二级) | 2016-12-21 00:48
0

还是JOIN好

 

男人要爽 | 园豆:6 (初学一级) | 2016-12-21 09:18
0

JION的两表数据很大时,JOIN会很慢,实际项目中遇到过这种情况,一般这种情况使用临时表来优化

for多次查询,这个非常不推荐,宁愿拼接好sql,查一次

不过说实话,性能相关的问题还是要结合实际情况的,你可以在自己的项目中对比下性能,实践出真知

收获园豆:1
xmj112288 | 园豆:126 (初学一级) | 2016-12-21 14:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册