我想知道在我有一个WHERE句子的sql中的句子之间在性能或资源使用方面有什么不同
WHERE VALUE IN (A,B,C .......)
或
WHERE VALUE = A OR VALUE = B OR VALUE = C.....
我想知道这一点,因为在Oracle Query中我必须搜索与此值相关的所有信息。我无法创建临时表。我只是从外部来源收到它们。首先,我会把它们放在IN子句中这么简单。值的数量是可变的,但绝不会低于3000.另一方面,我读到Oracle的条件类型的数量有一个限制,但到目前为止,我从未收到超过4000个。
答案 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(通常效果很好)。