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 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型