Postgresql postgres:如何提高未索引列的更新性能?
在我的PostgreSQL 9.3数据库中,我有一个表“my_table”,它有5列: 第1列、第2列、第3列、第4列和第5列 前两列(col1和col2)包含在唯一索引中,但其他三列上没有任何索引 此表与第三方实用程序一起使用,该实用程序以以下方式执行更新: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 =
"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),那么其他的树条件实际上对总的执行时间并不重要,所以你不能用它来做很多。注意:“一些值”应该是单引号,双引号表示标识符。顺便说一句:没有主键(或候选键)的表本质上是没有意义的。