如果从更新中排除0值,更新语句通常会更快吗?

时间:2017-05-11 14:11:18

标签: sql sybase-ase

我需要简化一个复杂的sql语句,我已经走了很长的路,现在我想删除一个对我来说似乎多余的条件:确保已经有值的行不会更新。

问题:一般来说,两个更新状态中的一个会比另一个快吗?

选项1 :(更简单)

UPDATE example_table SET example_column = 0
WHERE some_conditions

选项2 :(附加条件不更新已经为0的元素)

UPDATE example_table SET example_column = 0 
WHERE some_conditions AND example_column <> 0

Subquestion :如果选项2,为什么数据库优化无法检测到这个?

1 个答案:

答案 0 :(得分:1)

选项2至少与选项1一样快。根据数据库的配置方式,选项2可能更快,尤其是当零行数代表匹配{{1}的行的重要部分时},并且您的数据库使用some_condition上的昂贵逻辑定义更新触发器。

优化器无法将选项1优化为选项2的原因是它们的语义不相同。虽然这两个选项最终都使RDBMS处于相同状态,但必须将所有更新报告给RDBMS触发器。对于选项1,这包括琐碎的更新,这些更新被排除在选项2之外。