在联合之前或之后加入表格?

时间:2017-02-01 15:43:38

标签: sql oracle join hive union

我有3张桌子。 2是相似的。

table1/table2
col1 string
col2 string
col3 integer

table3
51 columns. strings, ints, doubles, dates

我很好奇哪个会更快。

with s1 as(
  Select *
  from table1
  union all
  Select *
  from table2
)
select *
from s1
inner join table3 t3
on s1.col1 = t3.col4

with s1 as(
  Select *
  from table1 t1
  inner join table3
  on t1.col1 = t3.col4
),s2 as(
  Select *
  from table2 t2
  inner join table3
  on t2.col1 = t3.col4
)
Select *
from s1
union all
Select *
from s2

表格未被分割或编入索引。我想知道这对两者都有用 蜂巢和甲骨文。

编辑02.02.2017 我试着在蜂巢中检查它。大约在同一时间开始。

union before join
Time taken: 539.593 seconds

jbu
Time taken: 603.071 seconds

不幸的是,几个小时后我决定检查结果

jbu
Time taken: 308.205 seconds

结果取决于群集的繁忙程度((

2 个答案:

答案 0 :(得分:0)

我唯一能看到的是第二个查询扫描表2两次。但是没有任何执行计划信息,这只是一个猜测。正如其他人所说,为什么不测试并让我们知道;也许分享执行计划!

答案 1 :(得分:-2)

绝对第一个更快。 with s1 as( Select * from table1 union all Select * from table2 ) select * from s1 inner join table3 t3 on s1.col1 = t3.col4