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,大家可以自己想下是为什么。