多列WHERE子句中的PostgreSQL索引

时间:2014-12-01 18:08:54

标签: sql postgresql indexing sql-update

我正在尝试优化以下示例建模的查询:

UPDATE posts
SET title = "Example", lock_version = 1
WHERE (
    posts.id = 123
    AND
    posts.lock_version = 0
)

我在posts.id上有一个唯一索引,可确保WHERE posts.id = 123上的正面点击永远不会返回多个结果。

我是否还需要posts.lock_version上的索引?

我想如果WHERE的第一部分返回多个结果,我会需要它,因为索引可以更快地缩小过滤器的范围。

虽然我描述的情况怎么样?

1 个答案:

答案 0 :(得分:3)

否。如果posts.id是唯一的,那么您不需要超过该列上的简单索引。

它不会更快 - 相反:因为你更新了行,你也会增加维护成本来更新附加索引。

除此之外:您不需要WHERE条款中的括号:

...
WHERE id = 123
AND   lock_version = 0

如果你引用"Example",它会引用该名称的一列。您可能想要值:'Example'。字符串文字的单引号。