首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化这个更新每一行的PostgreSQL查询?

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

Stack Overflow用户
提问于 2015-05-12 11:07:23
回答 1查看 535关注 0票数 7

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

代码语言:javascript
复制
update page_densities set density = round(density - 0.001, 2)

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

编辑:通过设置工作内存

代码语言:javascript
复制
set work_mem = '500MB';
update page_densities set density = round(density - 0.001, 2)

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-12 21:51:28

假设密度不是一个索引,则可以使用不同的填充因子来提高性能。有关更多信息,请参见这个问题/答案或PostgreSQL文档:

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

Slow simple update query on PostgreSQL database with 3 million rows

虽然不能修改表的填充因子,但可以创建一个具有不同填充因子的新表并复制数据。下面是一些示例代码。

代码语言:javascript
复制
--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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30189031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档