如何优化更新每一行的PostgreSQL查询?

时间:2015-05-12 11:07:24

标签: sql performance postgresql query-performance

我写了一个查询来更新整个表。如何改进此查询以缩短时间:

$http.get('/home').success(function(){}).error(function(){})
  

查询成功返回:628391行受影响,1754179毫秒(29分钟)   执行时间。

编辑:通过设置工作记忆..

update page_densities set density = round(density - 0.001, 2)
  

查询成功返回:628391行受影响,731711毫秒(12分钟)执行   时间。

1 个答案:

答案 0 :(得分:1)

假设密度不是索引,您可以使用不同的fillfactor来提高性能。有关详细信息,请参阅此问题/答案或PostgreSQL文档:

http://www.postgresql.org/docs/9.4/static/sql-createtable.html

Slow simple update query on PostgreSQL database with 3 million rows

虽然您无法修改表格的fillfactor,但您可以创建具有不同填充因子的新表格并复制数据。这是一些示例代码。

--create a new table with a different fill factor
CREATE TABLE page_densities_new
(
 ...some fields here
)
WITH (
  FILLFACTOR=70
);

--copy all of the records into the new table
insert into page_densities_new select * from page_densities;

--rename the original/old table
ALTER TABLE page_densities RENAME TO page_densities_old;

--rename the new table
ALTER TABLE page_densities_new RENAME TO page_densities;

在此之后,您有一个与原始名称和数据相同的表格,但它具有不同的填充因子。我将其设置为70,但它可以是任何值10到100.(默认值为100)