yayg2008 2010-12-17 14:16
浏览 249
已采纳

oracle分页语句

求教,在oracle 10g中,下面两条语句有什么区别:
[code="java"]
--分页语句
select * from (select e.*,rownum rn from (select * from emp) e where rownum <=15) where rn >=5;

select * from (select e.* ,rownum rn from (select * from emp) e) where rn>=5 and rn<=15;

[/code]

  • 写回答

5条回答 默认 最新

  • NeoRc 2010-12-18 14:45
    关注

    [quote]那样嵌套,是为了把真正要查询的内容分离,这只是个示例可能不用嵌套,但复杂了的时候,嵌套的效果就出来了[/quote]
    其实除了排序以外,其他大部分情况都可以通过优化语句结构直接加在里面的。
    反过来说,如果排序,分页实际上对性能没有任何提高,只是展示多少而已。

    [quote]select * from (select ROW_NUMBER() OVER(order by erin_id) rn,t.* from te_resource_info t)
    where rn between 5 and 20;[/quote]
    这种方式确实在性能上是最差的,甚至不如问题中第二种方式。

    其实说白了,分页在性能上的意义在于查询记录数的减少,而真正能将次数进行减少了才会提升性能。问题中第二种方式是将全部结果都查询出来再过滤。而用分析函数的方式不仅将全部记录都查询出来,还要进行排序,自然是最慢的。应该使用第一种方式,但是需要考虑风险:
    1.如果是服务器端翻页,越向后翻页速度越慢。当然,即便翻到最后一页,也只相当于第二种情况而已。
    2.如果优化方式使用了FIRST_ROWS的话,可能造成执行计划的变化,造成翻到后面的页会有较大性能的降低,甚至不如第二种。
    3.如果语句中有排序,事实上用哪种方式都一样。基本上别指望提高性能了。应该尽可能避免这种情况。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 R语言 拟时序分析降维图如何减少分支
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏