【问题标题】:postgres: how to improve update performance for un-indexed columns?postgres:如何提高未索引列的更新性能?
【发布时间】:2016-12-23 12:34:05
【问题描述】:

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

col1、col2、col3、col4 和 col5

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

此表与 3-rd 方实用程序一起使用,该实用程序以下列方式执行更新:

"update my_table set col3 = "some value"

where col1 = ...

and col2 = ...

and col3 = ...

and col4 = ...

and col5 = ..."

这些更新运行速度极慢,但我无法修改此自动生成的 SQL。

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

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

【问题讨论】:

  • 如果表具有唯一索引 (col1, col2),那么其他树条件实际上与总执行时间无关,因此您无能为力。
  • 注意:'some value' 应该用单引号括起来,双引号用于标识符。顺便说一句:没有主键(或候选键)的表本质上是没有意义的。

标签: postgresql


【解决方案1】:

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

因此,如果您不害怕更大的索引,请考虑添加一个涵盖所有搜索列的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 2021-12-18
    • 2017-05-14
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2015-04-28
    • 2013-09-15
    相关资源
    最近更新 更多