在网上查了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 是会影响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