Oracle数据库伪列的start和end,查询出一页的数据。
方法一、
explain plan for
select *from
(select A.*, rownum rn
from (select *from pscp_result_code_new)A
where rownum <=40
)
where rn>=21;
select *from table(dbms_xplan.display);
执行计划
方法二、
explain plan for
select *from
(select A.*, rownum rn
from (select *from pscp_result_code_new)A
)
where rn between 21 and 41;
select *from table(dbms_xplan.display);
执行计划
可以看出方法一的执行效率远高于方法二。
原因是方法一 查询第二层rn<=40 将推入内层查询,如果不满足将终止查询将返回结果。
方法二最内层返回给中间层的是所有满足条件的数据,中间层返回给最外层的数据也是所有满足条件的数据,数据的过滤层在最外层完成。