我得做一些复杂的数据导入。我需要做一些更新,目前更新超过300万行在一个查询。这个查询每个应用大约30-45秒(有些甚至4-5分钟)。我的问题是,我能否加快速度。我可以在哪里阅读关于它的内容,什么类型的索引,以及可以在哪些列上设置来改进这些更新。我不需要详细的答案,所以我不显示表格。我在找一些东西来学习。

最佳答案

两件事:
1)发布EXPLAIN ANALYZE查询的UPDATE
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分解为较小事务的上述方法将是一个很好的方法。
是的,在INDEX谓词中指定的相关列上加上UPDATE将有很大帮助。如果您需要进一步的帮助,请再次发布EXPLAIN ANALYZE

关于performance - Postgres优化UPDATE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6622717/

10-12 12:20
查看更多