我们有一张大桌子,需要对它进行深度复制。
由于我们没有足够的空磁盘空间来在一个语句中创建它,因此我尝试批量创建它。
但是批处理似乎运行得非常缓慢。

我正在运行这样的事情:

   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_dateSORTKEY之一


解释计划如下:

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方式,但不确定是否要执行。

08-07 19:23