簡體   English   中英

如何優化更新每一行的PostgreSQL查詢?

[英]How can I optimize this PostgreSQL query that updates every row?

我寫了一個查詢來更新整個表。 如何改進此查詢以減少時間:

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

查詢成功返回:受影響的行為628391行,執行時間為1754179毫秒(29分鍾)。

編輯:通過設置工作記憶..

set work_mem = '500MB';
update page_densities set density = round(density - 0.001, 2)

查詢成功返回:628391行受影響,731711毫秒(12分鍾)執行時間。

假設密度不是索引,您可以使用不同的fillfactor來提高性能。 有關詳細信息,請參閱此問題/答案或PostgreSQL文檔:

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

在PostgreSQL數據庫上緩慢簡單的更新查詢,有300萬行

雖然您無法修改表的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM