Oracle10G查询:不在VS等式中

时间:2014-03-17 22:33:05

标签: oracle oracle10g

我们遇到了Oracle查询(Query1)的问题,执行时间太长:

查询1:

Select * 
from table 
where status NOT IN ('IN_PROGRESS', 'SUCCESS', 'FAILURE'); 

- >表格大小为200,000的2分钟带来4000的记录。

查询2:

Select * 
from table 
where status ='WAITING'; 

- >对于相同的音量,在2秒内返回。

如果有人可以解释为什么会发生这种情况,那将会很棒。

1 个答案:

答案 0 :(得分:3)

您可能在状态列上有索引。 (请核实)。

如果你想到电话簿中的索引,有人说'找到等待先生的电话号码'然后你沿着第一个字母放大,直到找到W并找到他,然后你知道你已经完成了。如果有人说'找到姓氏不是等待的所有人的电话号码,那么从逻辑上完成此操作的唯一方法是通过整个索引,直到您检查每个条目以验证它不是' Mr Waiting' (当你到达W但你仍然需要做更多的工作时,你可能会足够聪明地停下来)

换句话说,=更容易被攻击'比NOT IN。你可能想研究一下sargable。您可能还想按照建议查看查询计划。一开始你可能无法理解,但练习会变得完美。