Tag Archives: HIGH WATER MARK

查询条件为ROWNUM=1仍产生长时间等待

正常情况下,指定了ROWNUM=1会迅速的返回结果,但是也有异常的情况产生。 其实ROWNUM=1之所以可以快速的返回结果,是由于执行计划中采用了STOPKEY的方式,当查询到第一条符合要求的记录后,执行就中止了。 但是ROWNUM=1并非对所有情况都适用,比如如果内存查询包含GROUP BY操作,那么ROWNUM=1就无法推到GROUP BY查询内部,因此这时的ROWNUM=1的条件对于查询速度的提高就非常有限了。还有一种情况,在指定了一个限制条件后,加上ROWNUM=1后,发现查询效率仍然不高。这时因为表中满足指定限制条件的记录非常少或者根本没有,以致于Oracle要扫描全部表数据后才能返回结果。 但是客户碰到了的现象和上面描述的几种情况都不相符,查询只是一个单表查询,唯一的限制条件就是ROWNUM=1,没有GROUP BY和ORDER BY语句,语句就是简单到不能再简单的:select * from RTDRULETRACEHISTORY where rownum = 1。 检查了这个语句的执行计划,并未发现异常之处: Id Operation Name ROWS Bytes Cost (%CPU) TIME 0 SELECT STATEMENT 2 (100) 1 COUNT STOPKEY 2 TABLE ACCESS FULL RTDRULETRACEHISTORY 1 827 2 … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment