我们遇到了Oracle查询(Query1)执行时间过长的问题:
Query1:
Select *
from table
where status NOT IN ('IN_PROGRESS', 'SUCCESS', 'FAILURE'); --> 2分钟,表大小为200,000,带来大小为4000的记录。
Query2:
Select *
from table
where status ='WAITING'; -->对于相同的卷,2秒内返回。
如果有人能解释为什么会发生这种情况,那就太好了。
发布于 2014-03-18 06:49:51
您可能在status列上有一个索引。(请核实)。
如果你想到电话簿中的一个索引,有人说‘给我找等待先生的电话号码’,然后你沿着第一个字母放大,直到你找到W,找到他,然后你就知道你完成了。如果有人说“给我找到每个姓不是等待先生的人的电话号码”,那么在逻辑上完成这项工作的唯一方法就是遍历整个索引,直到你检查完每个条目,以确认它不是“等待先生”(你可能足够聪明,在到达W时停止,但你仍然需要做更多的工作)
换句话说,与NOT IN相比,=更具“可封闭性”。你可能想研究一下sargable。您可能还想查看一下建议的查询计划。一开始你可能无法理解,但熟能生巧。
https://stackoverflow.com/questions/22466824
复制相似问题