亚马逊红移查询计划器

时间:2014-08-11 11:50:29

标签: amazon-redshift

我正面临亚马逊Redshift的情况,我还没能向自己解释。查询计划程序似乎无法在连接中的两个派生表的子查询中处理相同的表。

我基本上有三个表,Source_A,Source_B,Target_1,Target_2和类似

的查询
SELECT a,b,c,d FROM 
(
  SELECT a,b FROM Source_A where date > (SELECT max(date) FROM Target_1)
)     
INNER JOIN
(
  SELECT c,d FROM Source_B where date > (SELECT max(date) FROM Target_2)
)
ON Source_A.a = Source_B.c

只要表Target_1和Target_2是不同的表,查询就可以正常工作。如果我更改查询以使Target_2 = Target_1,则会发生一些事情。更改后,查询开始花费大约10倍的时间。当我查看性能监视器时,我可以看到所有这些额外时间都被占用,因此只有Leader节点处于活动状态。

当我对这两个选项进行解析时,我看到输出几乎没有差异。所有步骤都是一样的。但是区别在于EXPLAIN在一个半小时内需要几秒钟而另一个在目标表相同的情况下需要几乎半小时。

总而言之,我认为我观察到的是 - 在连接时,如果我在每个派生表的子查询中使用相同的表,那么查询规划器就会疯狂。

0 个答案:

没有答案