使用连接条件更新在redshift中耗时太长

时间:2016-09-11 23:22:25

标签: postgresql amazon-redshift

我在Redshift集群中有一个包含50亿行的表。我有一个作业试图根据一些过滤器更新一些列值。在这个表中更新任何东西都非常慢。这是一个例子:

Update tbl1
set price=tbl2.price, flag=true
from tbl2 join tbl1 on tbl1.id=tbl2.id
where tbl1.time between (some value) and
tbl2.createtime between (some value)

我按时排序键和id键。当我检查stl_scan表时,它显示我的查询在每个切片上扫描了5000万行,并且每个切片上只返回50K行。我在20分钟后停止了查询。

为了测试,我创建了具有10亿行的相同表,并且相同的更新查询花了3分钟。
当我以相同的条件运行select时,我会在几秒钟内得到结果。我有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我相信正确的语法是:

Update tbl1
    set price = tbl2.price,
        flag = true
from tbl2 
where tbl1.id = tbl2.id and
      tbl1.time between (some value) and
      tbl2.createtime between (some value);

请注意tbl1仅在update子句中进行过一次建议。没有联接,只是一个关联条款。