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
的第一部分返回多个结果,因为索引会缩短过滤器的速度。
但是我描述的情况如何呢?
答
第如果posts.id
是唯一的,那么您不需要比该列的简单索引更多。
它不会得到更快的速度 - 相反:由于您更新了行,因此您还需要增加维护成本来更新附加索引。
旁白:你不需要在你的WHERE
条款括号:
...
WHERE id = 123
AND lock_version = 0
如果你双引号"Example"
它指的是该名称的列。你可能想要的值:'Example'
。字符串文字的单引号。
+0
谢谢。是的,你的格式也是正确的。 – tompave 2014-12-02 11:41:31
如果posts.id是主键(或者是唯一的:候选键),那么所有其他列在功能上依赖于它,并且不需要额外的索引,因为您总是使用PK来寻址一行, – joop 2014-12-01 18:20:05