首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle10G查询: NOT IN与EQUALS

Oracle10G查询: NOT IN与EQUALS
EN

Stack Overflow用户
提问于 2014-03-18 06:33:05
回答 1查看 34关注 0票数 0

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

Query1:

代码语言:javascript
复制
Select * 
from table 
where status NOT IN ('IN_PROGRESS', 'SUCCESS', 'FAILURE'); 

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

Query2:

代码语言:javascript
复制
Select * 
from table 
where status ='WAITING'; 

-->对于相同的卷,2秒内返回。

如果有人能解释为什么会发生这种情况,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2014-03-18 06:49:51

您可能在status列上有一个索引。(请核实)。

如果你想到电话簿中的一个索引,有人说‘给我找等待先生的电话号码’,然后你沿着第一个字母放大,直到你找到W,找到他,然后你就知道你完成了。如果有人说“给我找到每个姓不是等待先生的人的电话号码”,那么在逻辑上完成这项工作的唯一方法就是遍历整个索引,直到你检查完每个条目,以确认它不是“等待先生”(你可能足够聪明,在到达W时停止,但你仍然需要做更多的工作)

换句话说,与NOT IN相比,=更具“可封闭性”。你可能想研究一下sargable。您可能还想查看一下建议的查询计划。一开始你可能无法理解,但熟能生巧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22466824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档