oracle分页查询分析,ORACLE分页查询

常见的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;

--执行时间:1.981秒

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;

--执行时间:1.887秒

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

--执行时间:2.886秒

从上述三个sql的我们可以发现:

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

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

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

原文:http://blog.csdn.net/qubushangming/article/details/27789859

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值