欢迎光临
我们一直在努力

Oracle Rownum分页改写



Oracle Rownum分页改写


—说明:案例来自《

 


收获,不止SQL优化》



创建测试数据:


—drop table test_rownum purge;

SQL
>
 
create
 
table
 test_rownum
as
 
select
 
*
 
from
 dba_objects
;

SQL
>
 
select
 
count
(*)
 
from
 test_rownum
;
 

—75793

SQL
>
 
alter
 
session
 
set
 statistics_level
=
all
 
;

SQL
>
 
set
 linesize
1000

SQL
>
 
set
 pagesize
500



分页写法


1

SQL
>
 
select
 
*
 
from
 
(
select
 t.
*,
rownum
 
as
 rn  
from
 test_rownum t
)
 a
where
 a.rn
>=
1
 
and
 a.rn
<=
10
;



查看执行计划:



SQL
>
 
select
 
*
 
from
 
table
(
dbms_xplan.display_cursor
(
null
,
null
,
'allstats last'
));



分页写法


2

SQL
>
 
select
 
*
 
from
 
(
select
 t.
*,
rownum
 
as
 rn  
from
 test_rownum t
where
 
rownum
<=
10
)
 a
where
 a.rn
>=
1
;
  



查看执行计划:

SQL
>
 
select
 
*
 
from
 
table
(
dbms_xplan.display_cursor
(
null
,
null
,
'allstats last'
));



总结:


写法1的buffer为1080,扫描真实数据为75793条,写法2的buffer只有5,扫描真实数据为10条,性能较写法1有很大改善。

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!


赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。