【问题标题】:Postgres improve large update performance?Postgres 提高大更新性能?
【发布时间】:2021-08-27 19:30:32
【问题描述】:

我正在迁移我的 Postgres 数据库并尝试将字符串值更新为数值,如下所示:

UPDATE table SET column = 1 WHERE LENGTH(column) = 1;

此表包含大约 2000 万行,并且更新一直需要很长时间才能运行。我在 LENGTH(column) 上有一个索引,在不同的列上有 4 个其他索引,其中一个是在 2 列上的 UNIQUE 索引。这个表还有一个外键约束。

我可以做些什么来加快这个查询?如果需要更多信息,我很乐意提供。

【问题讨论】:

  • 根据预期的更新行百分比和当前统计信息,甚至删除目标列上的索引(即删除length(column) 上的索引)可能是有益的。但是,这只能通过 EXPLAIN ANALYZE 来确定。但这似乎使它在运行查询时成为一个争论点。由于这是一次迁移,因此无论如何都应该是一次事件(至少在用户验收测试和生产环境中)。

标签: postgresql database-optimization


【解决方案1】:

删除影响列和索引的约束(支持WHERE 条件的约束除外)将加速这样的UPDATE

您还可以通过增加max_wal_size 获得少量性能提升。

除此之外,您只需要等待。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2021-11-10
    • 2017-06-21
    相关资源
    最近更新 更多