SQL中OR条件或IN条件之间的差异

时间:2015-05-26 21:49:02

标签: sql conditional-statements where-clause

我想知道在我有一个WHERE句子的sql中的句子之间在性能或资源使用方面有什么不同

WHERE VALUE IN (A,B,C .......)  

WHERE VALUE = A OR VALUE = B OR VALUE = C.....

我想知道这一点,因为在Oracle Query中我必须搜索与此值相关的所有信息。我无法创建临时表。我只是从外部来源收到它们。首先,我会把它们放在IN子句中这么简单。值的数量是可变的,但绝不会低于3000.另一方面,我读到Oracle的条件类型的数量有一个限制,但到目前为止,我从未收到超过4000个。

2 个答案:

答案 0 :(得分:1)

完全没有区别。内部数据库引擎将IN列表展平为OR条件堆栈,如

WHERE VALUE IN (A,B,C .......)  

将变得扁平化

WHERE VALUE = A OR VALUE = B ...

答案 1 :(得分:0)

它们逻辑相同(因为它们产生相同的结果),但优化器只会使用一个OR的值中的一个索引(如果存在) - 有效使用索引(因为O(log n)+ O(n)= O(n))。

根据我的经验,在寻找提高查询性能的方法时,我要做的第一件事就是将列上的OR转换为单个IN(通常效果很好)。