Oracle分页查询

方法一

-- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME WHERE 1 = 1 -- 条件ORDER BY CREATETIME DESC -- 排序) A  WHERE ROWNUM <= 40  )
WHERE RN > 30

方法二

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE 30 < RN <= 40

方法一比方法二效率要高很多,查询效率提高主要体现在 WHERE ROWNUM <= 40 这个语句上。

这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。方法一中,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

方法二中,由于查询条件30 < RN <= 40 是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。在方法二中,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,效率要比方法一要低得多。

注意

由于oracle排序算法问题,如果排序遇到相同的条件,比如时间,会使分页后一页包含前一页的内容,所以这个时候要把方法改成下面这两种。

  • 方法一,order by 加上id主键
SELECT * FROM(SELECT tt.*,ROWNUM AS RN FROM(SELECT t.* FROM ${tableName} twhere 1=1 -- 条件ORDER BY t.createTime DESC,t.id -- 排序) ttWHERE tt.ROWNUM &lt;= #{pageNum}*#{pageSize}) rsWHERE rs.RN > #{pageNum-1}*#{pageSize}
  • 方法二
SELECT * FROM(SELECT tt.*,ROWNUM AS RN FROM(SELECT t.* FROM ${tableName} twhere 1=1 -- 条件ORDER BY t.createTime DESC -- 排序) tt) rsWHERE   #{pageNum-1}*#{pageSize} &gt; rs.RN &lt;= #{pageNum}*#{pageSize}

Oracle分页查询相关推荐

  1. Oracle分页查询语句(六)

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracl ...

  2. oracle 关联出现重复数据,ORACLE 分页查询出现重复记录的解决办法

    今天在用Oracle分页查询数据的时候出现了重复数据,有的数据无法查出,很郁闷,想了想,找了资料,发现问题 分页语句: select * from ( select row_.*, rownum ro ...

  3. Oracle分页查询格式(八)

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询格式(一):http://yangtingkun.itpub.net/post/468/100278 Oracl ...

  4. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  5. Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询

    Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开 ...

  6. oracle分页排序查询,Oracle分页查询中排序与效率问题解决方法详解

    本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, ...

  7. JAVA中oracle分页语句,oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  8. oracle分页查询sql语句的rn,Mysql和Oracle中的分页SQL语句

    以前总结过一篇,Oracle分页查询语句的优化,当时对Oracle分页语句也着实花费了点时间记忆,不过今天在面试的时候,又考到了不同数据库的分页sql语句,对Oracle数据库的书写又存在了问题,以为 ...

  9. java oracle分页查询语句_Oracle分页查询语句的写法(转)

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  10. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

最新文章

  1. 【Ubuntu】将Ubuntu的源改为国内源
  2. java获取pdf文件的总页数
  3. 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR
  4. WebSocket 原理
  5. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
  6. asp.net截取指定长度的字符串内容
  7. BZOJ 2588: Spoj 10628. Count on a tree 树上跑主席树
  8. TCP是如何保证包的顺序传输
  9. python与sap_Python结合SAP GUI Script操作sap的简易教程
  10. Android 爆发病毒,华米 OV 均受影响;微信宣战百度搜索;抖音遭约谈 | CSDN极客头条...
  11. Java_String_01_由转义字符串得到其原本字符串
  12. Android项目文件的目录结构(1)
  13. mysql linux 安装包下载_mysql官网下载linux版本安装包
  14. 用python函数画德国国旗代码_给我一面国旗 python帮你实现
  15. PyTorch的参数固定以及detach clone
  16. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)
  17. 基于AR虚拟现实技术的维基世界浏览器wikitude
  18. 《制造杀人犯/Making A Murder》中的疑点和感想
  19. java无法验证发布者_Win10系统提示无法验证发布者的解决技巧
  20. SHA-256哈希函数实现

热门文章

  1. 牛腩新闻发布系统—发布错误总结
  2. Java数字抽奖游戏核心代码及分析
  3. 卡巴斯基PURE3.0激活码授权文件KEY
  4. 卡巴斯基KEY文件的类型选择
  5. 基于jquery实现的web版excel
  6. 扫码枪测试软件,有线条码扫码枪的测试方法
  7. Jmeter 安装各个历史版本
  8. Altium Designer元件库下载
  9. java调用百度api完成人脸识别
  10. 神马js都是浮云-----限时秒杀