我正在尝试优化以下示例建模的查询:
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 :(得分:3)
否。如果posts.id
是唯一的,那么您不需要超过该列上的简单索引。
它不会更快 - 相反:因为你更新了行,你也会增加维护成本来更新附加索引。
除此之外:您不需要WHERE
条款中的括号:
...
WHERE id = 123
AND lock_version = 0
如果你引用"Example"
,它会引用该名称的一列。您可能想要值:'Example'
。字符串文字的单引号。