论坛首页 综合技术论坛

Oracle查询结果分页

浏览 6785 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-21  

分页查询是web开发中非常常用的功能,笔者主要使用Oracle数据库工作,所以只总结一下Oracle中的分页方法

通常是由下面语句就可以完成分页功能:

 

SELECT x.* 
from (SELECT z.*,rownum rn from XZQH z where rownum<=101) x 
where x.rn>=90 

 

查询第90条到101条记录(包含边界);

 

小弟才疏学浅,目前就只会这一种分页方法,但是这种分页方式的缺点是显而易见的,如果数据量过大的话,(SELECT z.*,rownum rn from XZQH z where rownum<=101)这段代码查询的数据量就很大,如果查询条数很大(比如第89900-90000条)时,会先查出90000条数据来,然后再取后100条,这样势必导致效率低下,反应变慢.

 

我想,应该有更高效的方法,但是在网上搜索过却没有结果,如果有哪位朋友有更好的办法,请不吝赐教,谢谢.

   发表时间:2011-11-02  
网上查过;貌似这种方法的效率是最高的。
0 请登录后投票
   发表时间:2011-11-02  
别把oracle想得太傻
0 请登录后投票
   发表时间:2011-11-02  
oracle就是这个不方便,但这个又很常用。
0 请登录后投票
   发表时间:2011-11-09  
SELECT *   
from (SELECT z.*,rownum r from XZQH) 
where r > 1000 and r <=500;

我最近是这么用的,从xx条开始,每次取500条
0 请登录后投票
   发表时间:2011-11-09  
抱歉,漏写了个r

应该是

SELECT r,* FROM 
(SELECT *,rownum r FROM  XZQH)    
where r > 1000 and r <= 500;
0 请登录后投票
   发表时间:2011-11-09  
楼主的方法是最高效的,oracle会自动优化
0 请登录后投票
   发表时间:2011-11-10  
SELECT x.*  
from (SELECT z.*,rownum rn from XZQH z where rownum>=8990) x  
where x.rn<=9000 

我不知道这样行不行
0 请登录后投票
   发表时间:2011-11-10  
leavesforeye 写道
SELECT x.*  
from (SELECT z.*,rownum rn from XZQH z where rownum>=8990) x  
where x.rn<=9000 

我不知道这样行不行


这样不行,oracle不支持。
1 请登录后投票
   发表时间:2011-11-11  
又学了一招,哈哈....
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics