我们有一张大桌子,需要对它进行深度复制。
由于我们没有足够的空磁盘空间来在一个语句中创建它,因此我尝试批量创建它。
但是批处理似乎运行得非常缓慢。
我正在运行这样的事情:
INSERT INTO new_table
SELECT * FROM old_table
WHERE creation_date between '2018-01-01' AND '2018-02-01'
即使查询返回少量的行〜1K
SELECT * FROM old_table
WHERE creation_date between '2018-01-01' AND '2018-02-01'
INSERT
查询大约需要50分钟才能完成。old_table
具有〜286M行和〜400列creation_date
是SORTKEY
之一解释计划如下:
XN Seq Scan on old_table (cost=0.00..4543811.52 rows=178152 width=136883)
Filter: ((creation_date <= '2018-02-01'::date) AND (creation_date >= '2018 01-01'::date))
我的问题是:
INSERT
查询花费这么长时间的原因可能是什么? 最佳答案
我认为,以下是两种可能的方法--如果您可以在问题中添加更多细节,那将是很好的。
正如@John在评论中所述,您的SORTKEY在RedShift中很重要,creation_date
排序键是吗?
您是否对old_table
做了大量更新,如果是,则必须先清理VACUUM DELETE Only old_table
,然后再选择查询。
其他选择,您可能正在执行S3方式,但不确定是否要执行。