ITPub博客

首页 > Linux操作系统 > Linux操作系统 > rownum问题讨论

rownum问题讨论

原创 Linux操作系统 作者:enjoy_oracle 时间:2007-05-23 14:48:59 0 删除 编辑
rownum问题讨论
我在进行分页查询测试时遇到如下问题:
我用了两种方式测试

第一种:用between and 的方式:

--测试1:执行0.741s
select * from(select rownum rn,A.object_id,A.object_name from all_objects A ) where rn between 15 and 35

--测试2:执行0.772s
select * from(select rownum rn,A.object_id,A.object_name from all_objects A ) where rn between 25000 and 25020

--测试3:执行0.781s
select * from(select rownum rn,A.object_id,A.object_name from all_objects A ) where rn between 46000 and 46020

每次取出20条记录。从这三条的结果看出不管是查询前面的还是后面的数据,查询时间几乎相等
************************************************************************************
我又用minus的方式:

--测试4:执行0.009s
select rownum rn,object_name,object_id from all_objects where rownum<25
minus
select rownum rn,object_name,object_id from all_objects where rownum<5

--测试5:执行0.371s
select rownum rn,object_name,object_id from all_objects where rownum<25020
minus
select rownum rn,object_name,object_id from all_objects where rownum<25000

--测试6:执行1.592s
select rownum rn,object_name,object_id from all_objects where rownum<46020
minus
select rownum rn,object_name,object_id from all_objects where rownum<46000

查询时间差别很多!
************************************************************************************
我知道rownum的机制是:“ROWNUM 列只有在记录被取出或过滤时才会应用到记录上”,如测试4:取第5到25条记录,则他查询25条记录,然后取中间20条,而测试6:取第46000到46020条记录,则他要查询46020条记录,然后取中间20条,因此后者比前者要慢

但按照这种理解:测试1-3的内查询是把所有的记录全查了一遍后才限制的rownum,道理上所用的时间应该更长才是,怎么能比测试6 用的时间还短呢?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9947619/viewspace-506429/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-11-03

  • 博文量
    1
  • 访问量
    931