Postgres优化更新

sen*_*nin 1 postgresql performance

我必须做一些复杂的数据导入.我需要做一些UPDATE,目前在一个查询中更新超过300万行.该查询每个应用大约30-45秒(其中一些甚至4-5分钟).我的问题是,我是否可以加快速度.我在哪里可以阅读有关它的内容,什么样的索引以及我可以设置哪些列来改进这些更新.我不需要exacly回答,所以我不显示表格.我正在寻找一些东西来了解它.

Sea*_*ean 6

两件事情:

1)发布EXPLAIN ANALYZE您的UPDATE查询.

2)如果您UPDATE不需要是原子的,那么您可能需要考虑拆分受您影响的行数UPDATE.为了最大限度地减少因超出自由空间地图而导致的"丢失行数" ,请考虑以下方法:

  1. BEGIN
  2. UPDATE ... LIMIT N;或一些限制行数的谓词(例如WHERE username ilike 'a%';).
  3. COMMIT
  4. VACUUM table_being_updated
  5. 重复步骤1-4,直到更新所有行.
  6. ANALYZE table_being_updated

我怀疑你正在更新表中的每一行,并且不需要在单个事务结束时使用新值显示所有行,因此上述打破UPDATE较小事务的方法将是一个好方法.

是的,INDEXUPDATE谓词中指定的相关列将有助于显着帮助.EXPLAIN ANALYZE如果您需要进一步的帮助,请再次发布.