我必須做一些複雜的數據導入。我需要做一些更新,當前在一個查詢中更新超過300萬行。該查詢每個應用約30-45秒(其中一些甚至4-5分鐘)。我的問題是,我是否可以加快速度。我在哪裏可以讀到關於它的信息,可以設置哪些索引以及在哪些列上改進這些更新。我不需要很簡單的回答,所以我不會顯示錶格。我正在尋找一些東西來了解它。Postgres優化更新
1
A
回答
5
兩件事情:
1)發表您的UPDATE
查詢的EXPLAIN ANALYZE
。 2)如果你的UPDATE
不需要是原子的,那麼你可能要考慮拆分UPDATE
所影響的行數。爲了儘量減少「丟失行」因超過Free Space Map的數量,可以考慮以下方法:
BEGIN
UPDATE ... LIMIT N;
或一些謂詞將限制行(例如WHERE username ilike 'a%';
)的數量。COMMIT
VACUUM table_being_updated
- 重複步驟1-4,直到所有行被更新。
ANALYZE table_being_updated
我懷疑你是在爲你更新表中的每一行,並不需要所有的行可見與單個交易結束的新值,因此打破了上述的做法UPDATE
進入較小的交易將是一個好方法。
是的,在UPDATE
的謂詞中指定的相關列上的INDEX
將有助於顯着幫助。如果您需要更多幫助,請再次發帖EXPLAIN ANALYZE
。
0
如果更新次數的你的意思是一個UPDATE命令每個更新的行,那麼問題是,所有的目標表的索引將被更新,所有限制將在每一個更新的行進行檢查。如果是這樣的話,那麼嘗試用,而不是一個單一的更新來更新所有行:
update t
set a = t2.b
from t2
where t.id = t2.id
如果導入的數據是文本文件,然後從那裏將它插入一個臨時表第一和更新。見我的回答here
相關問題
- 1. 優化postgres查詢
- 2. Postgres查詢優化
- 3. 性能優化 - Postgres
- 4. 優化Postgres查詢
- 5. Oracle - 優化更新
- 6. 優化QListView更新
- 7. MySql更新優化?
- 8. 如何使用postgres以優化方式更新大型表格
- 9. 如何優化使用Delphi(BDE組件)更新Postgres?
- 10. 遞歸postgres SQL優化
- 11. Postgres優化/替換DISTINCT
- 12. Postgres的優化插入/只
- 13. 優化我的postgres查詢
- 14. 優化Postgres計數(*)查詢
- 15. postgres查詢優化問題
- 16. 優化相關的更新
- 17. 優化更新查詢
- 18. 優化更新聲明
- 19. 優化更新語句
- 20. Java MySQL更新優化
- 21. 更新MySQL查詢優化
- 22. 的Oracle SQL優化更新
- 23. 優化PostgreSQL的更新
- 24. 優化MySQL Subselect更新
- 25. MySQL - 更新+查詢優化
- 26. 如何進行更新statment更優化
- 27. 更新Postgres裏
- 28. 優化UNNEST intarray與GROUP BY Postgres的
- 29. 優化Postgres的前N個查詢
- 30. 複雜的Rails/Postgres的SQL優化
請發佈UPDATE語句的執行計劃(或者作爲此處的格式化代碼或作爲http://explain.depesz.com/的鏈接)。您可能還想閱讀這篇文章:http://wiki.postgresql.org/wiki/SlowQueryQuestions,以便在發佈這類問題時找出哪些信息是有用的 –