Oracle 分页最优方案

1.根据ROWID来分

select * from t_table where rowid in (select rid from (select rownum rn,rid from (select rowid rid,cid from t_table order by cid desc) where rownum<10000) where rn>9980) order by cid desc;


执行时间0.03秒
2.按分析函数来分
select * from (select t.*,row_number() over(order by cid desc) rk from t_table t) where rk<10000 and rk>9980;


执行时间1.01秒


3.按ROWNUM来分
select * 

from(

select t.*, rownum rn 

        from ( 

select * 

from t_table

-------where statements

                order by cid desc

               ) t 

       where rownum<10000) 

where rn>9980;


执行时间0.1秒


你可能感兴趣的:(Oracle 分页最优方案)