我可以在PostgreSQL 9.3中用TRUNCATE + COPY / FREEZE替换TRUNCATE + COPY + ANALYZE

时间:2015-06-07 02:41:50

标签: postgresql postgresql-9.3

我正在尝试优化我的批量加载例程。

目前我按步骤加载数据(我不遵循下面的SQL语法,只是算法):

BEGIN
TRUNCATE table
COPY into table
ANALYZE table
COMMIT

PostgreSQL 9.3之前,这是重新加载表的唯一推荐方法。版本9.3引入了FREEZE选项,可以与COPY命令一起使用。标准文件说:

  

FREEZE

     

请求已经冻结的行复制数据,就像   他们将在运行VACUUM FREEZE命令之后。这是   旨在作为初始数据加载的性能选项。行会   仅在已创建或截断正在加载的表时冻结   在当前的子事务中,没有游标打开也有   此交易没有保留旧快照。

我的当前问题是,我是否仍需要在ANALYZE之后运行COPY/FREEZE。标准文件没有给出任何直接的建议。以下序列是否足够或我是否还需要运行ANALYZE

BEGIN
TRUNCATE table
COPY/FREEZE table
COMMIT

谢谢!

1 个答案:

答案 0 :(得分:3)

是的,在您ANALYZE数据后,您仍应COPY强制立即生成表统计信息。

元组是否被冻结与统计无关,这是避免以后反环绕真空活动的一种方法。