当我使用emp.status >= 412
或emp.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
答案 0 :(得分:0)
您可以检查每个查询的执行计划并进行比较,以详细了解引擎执行每个查询的操作
如果在相同的情况下有一条很长的路径,这应该只要你说它花了这么长时间
然后尝试在您的桌面或整个数据库上运行Update Statistics
这应该根据您桌面上数据的性质优化执行计划
有关执行计划的更多详细信息,请check this
有关Update Statistics
,check this
答案 1 :(得分:0)
是的,它看起来像索引问题。尝试在状态字段上删除索引,80%它会有所帮助。或者,您应该使用直方图收集统计数据。
无论如何,首先你应该在这种情况下做 - 看看执行计划(上面提到的EXPLAIN PLAN)。使用FULL TABLE SCAN时,您的查询速度很快,但如果使用INDEX访问则会很慢。