我在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时,我会在几秒钟内得到结果。我有什么问题吗?
答案 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
子句中进行过一次建议。没有联接,只是一个关联条款。