使用相同的运算符,查询运行缓慢

时间:2014-12-30 08:51:09

标签: sql oracle

当我使用emp.status >= 412emp.status <= 412或没有emp.status过滤器时,以下查询正常(快速),但是当我只使用相等的运算符时,即emp.status = 412,我的查询运行得太慢了。

问题是什么?这可能是一些索引问题吗?我在状态字段上创建了一个索引。

SELECT emp.empno FROM EMP_STATUS emp WHERE
     emp.empno in 
     (
      SELECT schemp.empno FROM  sched_emp schemp,sections scts 
      WHERE    schemp.SECTSCODE = scts.SECTSCODE   AND schemp.dep_code = scts.dep_code    AND scts.years=2014    
      AND schemp.dep_code = 2 
     )
     and emp.dep_code = 2
      and  emp.status  = 412

2 个答案:

答案 0 :(得分:0)

您可以检查每个查询的执行计划并进行比较,以详细了解引擎执行每个查询的操作

如果在相同的情况下有一条很长的路径,这应该只要你说它花了这么长时间

然后尝试在您的桌面或整个数据库上运行Update Statistics

这应该根据您桌面上数据的性质优化执行计划

有关执行计划的更多详细信息,请check this

有关Update Statisticscheck this

的详细信息

答案 1 :(得分:0)

是的,它看起来像索引问题。尝试在状态字段上删除索引,80%它会有所帮助。或者,您应该使用直方图收集统计数据。

无论如何,首先你应该在这种情况下做 - 看看执行计划(上面提到的EXPLAIN PLAN)。使用FULL TABLE SCAN时,您的查询速度很快,但如果使用INDEX访问则会很慢。