关于连续的join

1  对执行速度的影响     

        曾经写过用四个表连续left join的语句,执行速度特别慢,2个多小时还执行不完,后来将这个语句拆开,独立中两个子表,前两个表先join,完了与第3个表join,然后与第4个表join。修改后执行时间控制在20分钟左右。

2  对结果的影响 

 多个表是不能直接用key进行full outer join的,应该是两个join完了,再与下一个join,否则会出现数据重复。
比如表a outer join b,用a.key=b.key,可能join出来2条数据,一条能对的上的,一条a.key对应不上的,此时再与c join,还是用a.key去=c.key的话,就要出问题了。
a表
1 2


b表
1 3
3 1
 outer join完:
1    2      1  3
null null  3  1
c:
1 4


1      2     1   3 1 4
null null 3 1 1 4
此时如果以c的字段进行count的话,就会有重复的key值了

而如果先对a表和b表join的结果的key进行处理,就会把null null 3 1 变成3 null 3 1,这样再join c时,结果为

1  2    1   3     1     4 

3 null 3  1   null  null 

此时不管以哪个表的字段进行统计,都是一样的,符合条件的key=1就一条。

因此要先join前两个,对key进行合并处理,再与剩下的分别join。

另外我觉得left join是不会出现这个问题的,如果不考虑性能问题,可以连续join,大家可以自己想下是为什么。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值