【发布时间】: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