G.B*_*G.B 7 sql postgresql performance query-performance
我写了一个查询来更新整个表.如何改进此查询以减少时间:
update page_densities set density = round(density - 0.001, 2)
Run Code Online (Sandbox Code Playgroud)
查询成功返回:受影响的行为628391行,执行时间为1754179毫秒(29分钟).
编辑:通过设置工作记忆..
set work_mem = '500MB';
update page_densities set density = round(density - 0.001, 2)
Run Code Online (Sandbox Code Playgroud)
查询成功返回:628391行受影响,731711毫秒(12分钟)执行时间.
假设密度不是索引,您可以使用不同的填充因子来提高性能。请参阅此问题/答案或 PostgreSQL 文档以获取更多信息:
http://www.postgresql.org/docs/9.4/static/sql-createtable.html
对 300 万行的 PostgreSQL 数据库进行缓慢的简单更新查询
尽管您无法修改表的填充因子,但您可以创建具有不同填充因子的新表并复制数据。这是一些示例代码。
--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;
Run Code Online (Sandbox Code Playgroud)
此后,您将拥有一个与原始表具有相同名称和数据的表,但它具有不同的填充因子。我将其设置为 70,但它可以是 10 到 100 之间的任何值。(100 是默认值)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |