当前位置: 代码迷 >> Oracle开发 >> oracle 分页查询有关问题
  详细解决方案

oracle 分页查询有关问题

热度:149   发布时间:2016-04-24 06:26:48.0
oracle 分页查询问题
在网上查了oracle的分页,一般都说这样写效率比较高:

select *
  from (select a.*, rownum rm
          from (select * from sp_permit p ) a
         where rownum <= 40) b
 where b.rm >= 10




如果换成以下这种写法会有什么问题吗?效率上哪种更好一些呢?

select *
  from (select s.*, rownum rm from sp_permit  p and rownum <= 40)  a
 where a.rm >= 10


两层的查询是不是要比三层的快一些呢??
------解决思路----------------------
这两个是一样的。一般是用前者,是因为分页通常会用到排序,而order by条件必须加在第一个语句的最里层查询当中
------解决思路----------------------
引用:
这两个是一样的。一般是用前者,是因为分页通常会用到排序,而order by条件必须加在第一个语句的最里层查询当中

第一、向版主说的这个因素,order by 是会影响rownum的。是先取出了rownum再order by.楼主可以随便一个例子试下就知道了(当然注意 order by主键是看不到这种效果)。
第二、在应用程序方面,都喜欢封装公共部分。而这分页就是很好的利用。如下 括号里面的可以直接是 传进来的一个随便的sql。

select *
  from (select a.*, rownum rm
          from (select * from sp_permit p ) a
         where rownum <= 40) b
 where b.rm >= 10

  相关解决方案