码迷,mamicode.com
首页 > 数据库 > 详细

ORACLE分页查询

时间:2015-07-18 16:45:26      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

通用oracle有三种方法来实现分页查询,通过各ROWNUM、ROWID、或分析功能的实现。这将是测试表USER_INFO案件,简要实现三大种分页:

-- Create table
create table USER_INFO
(
  USER_ID      NUMBER(12) not null,
  NAME         VARCHAR2(30),
  PET_NAME     VARCHAR2(30),
  HEAD_ICO     VARCHAR2(255),
  CREATE_DATE  DATE not null
)
1.依据ROWNUM分页

SELECT TT.*
  FROM (SELECT ROWNUM RN, T.*
          FROM (SELECT UI.USER_ID,
                       UI.NAME,
                       UI.PET_NAME,
                       UI.HEAD_ICO,
                       UI.CREATE_DATE
                  FROM USER_INFO UI
                 ORDER BY UI.CREATE_DATE DESC) T
         WHERE ROWNUM < 600010) TT
 WHERE TT.RN >= 600000;
<span style="color:#ff0000;">--运行时间:1.981秒</span>

2.依据ROWID分页

SELECT UI.USER_ID, UI.NAME, UI.PET_NAME, UI.HEAD_ICO, UI.CREATE_DATE
  FROM USER_INFO UI
 WHERE ROWID IN (SELECT RID
                   FROM (SELECT ROWNUM RN, RID
                           FROM (SELECT ROWID RID
                                   FROM USER_INFO 
                                  ORDER BY CREATE_DATE DESC)
                          WHERE ROWNUM < 600010)
                  WHERE RN >= 600000)
 ORDER BY UI.CREATE_DATE DESC;
<span style="color:#ff0000;"> --运行时间:1.887秒</span>

3.依据分析函数分页

SELECT *
  FROM (SELECT UI.USER_ID,
               UI.NAME,
               UI.PET_NAME,
               UI.HEAD_ICO,
               UI.CREATE_DATE,
               ROW_NUMBER() OVER(ORDER BY UI.CREATE_DATE DESC) RK
          FROM USER_INFO UI) T
 WHERE T.RK < 600010
   AND T.RK >= 600000
<span style="color:#ff0000;">--运行时间:2.886秒</span>

从上述三个sql的我们能够发现:

(1) 不管用那种方式实现分页,都是要用到嵌套子查询的;

(2)查询所需字段是一般建议一一列出所需字段,而不是通过select * 的方式所有查出。这样会影响查询效率。

(3)採用ROWID分页查询效率相对较高,ROWNUM和分析函数分别次之。当然,对于数据量非常大的表。可能只通过上述方式是非常慢满足性能需求的。还需通过优化SQL或方法的完整索引。


版权声明:本文博客原创文章。博客,未经同意,不得转载。

ORACLE分页查询

标签:

原文地址:http://www.cnblogs.com/bhlsheji/p/4657036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!