Sql Oracle在或中的性能

Sql Oracle在或中的性能,sql,oracle,plsql,Sql,Oracle,Plsql,oracle中的哪一个运营商在或中提供了更好的性能 例: 或 您肯定希望执行解释计划,但我希望性能相同。这两条语句是等效的,优化器将生成相同的访问路径。因此,您应该选择可读性最好的一个(我认为是第一个)。在像您这样的简单查询中,优化器足够聪明,可以100%相同地处理它们,使它们完全相同 然而,这可能不是100%的情况。 例如,在优化大型复杂接头时,优化器可能不会智能地将这两种方法等同起来,从而选择错误的方案。我在Sybase上观察到了一些类似的问题,尽管我不知道它是否存在于Oracle中(因此我

oracle中的哪一个运营商在或中提供了更好的性能

例:


您肯定希望执行解释计划,但我希望性能相同。

这两条语句是等效的,优化器将生成相同的访问路径。因此,您应该选择可读性最好的一个(我认为是第一个)。

在像您这样的简单查询中,优化器足够聪明,可以100%相同地处理它们,使它们完全相同

然而,这可能不是100%的情况。


例如,在优化大型复杂接头时,优化器可能不会智能地将这两种方法等同起来,从而选择错误的方案。我在Sybase上观察到了一些类似的问题,尽管我不知道它是否存在于Oracle中(因此我的“潜在”限定符)。

我会犹豫是否使用它。如果添加其他条件,则需要小心。例如,添加AND需要记住添加括号

例如:

将更改为:

select * from table where ( y = 1 or y = 2 or y = 3 ) AND x = 'value'

很容易忘记包含括号并插入难以识别的bug。仅就可维护性而言,我强烈建议使用IN而不是OR。

注意,如果它们相同,从可读性的角度来看,IN列表更容易阅读,因此,我建议假设解释计划显示它们是等效的。这个问题有一个类似的问题,并用可能提高性能的备选解决方案来回答。虽然我同意前两个答案(@vincent和@eric)更直接地解决了这个问题,但我同意你的看法。我很少在没有括号的情况下使用“OR”,无论多么简单。它使以后的代码更安全,并提高可读性还有其他好的答案——我只是想给出增值注释;)。
select * from table where y = 1 or y = 2 or y = 3
select * from table where y = 1 or y = 2 or y = 3
select * from table where ( y = 1 or y = 2 or y = 3 ) AND x = 'value'