PostgreSQL的指数多列WHERE子句

问题描述:

我试图优化仿照下面的例子查询:PostgreSQL的指数多列WHERE子句

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的第一部分返回多个结果,因为索引会缩短过滤器的速度。

但是我描述的情况如何呢?

+0

如果posts.id是主键(或者是唯一的:候选键),那么所有其他列在功能上依赖于它,并且不需要额外的索引,因为您总是使用PK来寻址一行, – joop 2014-12-01 18:20:05

如果posts.id是唯一的,那么您不需要比该列的简单索引更多。

它不会得到更快的速度 - 相反:由于您更新了行,因此您还需要增加维护成本来更新附加索引。

旁白:你不需要在你的WHERE条款括号:

... 
WHERE id = 123 
AND lock_version = 0 

如果你双引号"Example"它指的是该名称的列。你可能想要的值:'Example'。字符串文字的单引号。

+0

谢谢。是的,你的格式也是正确的。 – tompave 2014-12-02 11:41:31