Postgresql postgres:如何提高未索引列的更新性能?

Postgresql postgres:如何提高未索引列的更新性能?,postgresql,Postgresql,在我的PostgreSQL 9.3数据库中,我有一个表“my_table”,它有5列: 第1列、第2列、第3列、第4列和第5列 前两列(col1和col2)包含在唯一索引中,但其他三列上没有任何索引 此表与第三方实用程序一起使用,该实用程序以以下方式执行更新: "update my_table set col3 = "some value" where col1 = ... and col2 = ... and col3 = ... and col4 = ... and col5 =

在我的PostgreSQL 9.3数据库中,我有一个表“my_table”,它有5列:

第1列、第2列、第3列、第4列和第5列

前两列(col1和col2)包含在唯一索引中,但其他三列上没有任何索引

此表与第三方实用程序一起使用,该实用程序以以下方式执行更新:

"update my_table set col3 = "some value"

where col1 = ...

and col2 = ...

and col3 = ...

and col4 = ...

and col5 = ..."
这些更新运行速度非常慢,但我无法修改自动生成的SQL

我只能对“my_table”表进行更改


为了适应这种类型的更新查询并提高其性能,我能做的最好的事情是什么?

我刚刚测试了您描述的情况。正如klin所说,数据库最初使用的是唯一索引,而且速度非常快。但如果您创建一个非唯一索引,覆盖所有搜索列(col1到col5),则该索引将受到青睐。在200万行上测试,前两列是随机ID,其余是低分散值


所以,如果你不害怕一个更大的索引,考虑添加一个覆盖所有搜索的列。

如果表有一个唯一的索引(COL1,COL2),那么其他的树条件实际上对总的执行时间并不重要,所以你不能用它来做很多。注意:“一些值”应该是单引号,双引号表示标识符。顺便说一句:没有主键(或候选键)的表本质上是没有意义的。