Oracle 分页查询方法和效率分析
1.Oracle 12c fetch抓取记录
查询前10行记录
# fetch first 10 rows only
查询6至10行记录
# offset 5 rows fetch next 5 rows only
按百分比查询
# offset 10 rows fetch next 10 percent rows only
2.利用伪列rownum嵌套分页抓取记录
select * from
(select rownum as rn,t1.* from where rownum <= 10) t2
where rn >= 5
注:效率最高,几乎不受影响,但是SQL主体和分页操作不分离,不利于程序开发
select * from
(select rownum as rn,t1.* from
(select * from test) t1
where rownum <= 10) t2
where rn >= 5
select * from
(
select rownum as rn,t1.* from
(select * from test) t1
)
where rn between 5 and 10
注:其中绿色的表示不进行翻页的原始语句,蓝色部分控制分页查询的范围
选择第6到10条记录存在两种方法,
一种是上面例子中展示的在查询的第二层通过ROWNUM <= 10来控制最大值,在查询的最外层控制最小值。
而另一种方式是去掉查询第二层的WHERE ROWNUM <= 10语句,在查询的最外层控制分页的最小值和最大值。
查询效率分析:
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 10就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 6 AND 10是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。
以下主要为实现分页功能:
3.利用分析函数row_number()over(order by 字段)增加记录排序列
select * from(
select id,realname,row_number()over(order by id asc) rn from t_user
) where rn between 6 and 10
4.利用minus方法
(SELECT * FROM (SELECT * FROM test ORDER BY id asc) WHERE ROWNUM<10)
MINUS
(SELECT * FROM (SELECT * FROM test ORDER BY id asc) WHERE ROWNUM<6);
建议:
1.SQL主体不需要排序的简单操作,建议采用方式二的第一种方法
2.SQL主题需要排序且逻辑复杂,建议采用方式二中的第二种方法或者方式一(只支持Oracle 12C)
转载于:https://www.cnblogs.com/xiaogaokui/p/9070576.html
Oracle 分页查询方法和效率分析相关推荐
- oracle 分页语句效率高,Oracle 10g SQL分页查询语句和效率分析
下面统计一下这张表中的记录数: SQL> select count(*) from customers; COUNT(*) ---------- 55500 已用时间: 00: 00: 00. ...
- oracle分页排序查询,Oracle分页查询中排序与效率问题解决方法详解
本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题. 原始未分页查询Sql代码如下: select ROWNUM rn, ...
- MySQL 和 Oracle 大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询
Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开 ...
- java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法
oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...
- JAVA中oracle分页语句,oracle分页查询语句,java得到分页查询语句的方法
oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...
- sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...
- java oracle分页查询语句_Oracle分页查询语句的写法(转)
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...
- 大数据量分页查询方法(转)
本文旨在介绍一种对数据库中的大数据量表格进行分页查询的实现方法,该方法对应用服务器.数据库服务器.查询客户端的cpu和内存占用都较低,查询速度较快,是一个较为理想的分页查询实现方案. 1.问题的提出 ...
最新文章
- 在GridView里做单选按钮,总结了三种方法
- SQLServer · 最佳实践 · RDS for SQL Server 2012 权限限制的提升与改善
- 高职学计算机专业排名,海南雅典职业技术学校官网
- Linux发行版新秀!风格对比苹果
- Github上传代码截图过程
- 在SAP Spartacus产品明细页面用outlet显示自定义数据
- Python爬虫自学之第(零)篇——爬虫思路和request模块使用
- 图解 Linux 安装 JDK1.8 、配置环境变量
- 新版二开cp盲盒小纸条月老小程序源码
- 著名游戏公司CAPCOM与WAX达成合作 将推出“街头霸王”主题NFT
- 封装特效记录--持续更新
- D类音频功放NS4110B电路设计
- .netcore下使用Chloe.ORM框架
- 大数据杀熟!我被美团会员割了韭菜
- 微新小程序封装wx.request (使用回调函数)
- Can‘t connect to any repository: 的解决办法, 在Push代码,提交代码到代码仓库的时候,提示不能连接到该代码仓库
- 智能农场 阳光温湿度 检测 远程控制开关 机智云
- 微信小程序开发者工具真机调试和预览连接本地服务器
- 2.Visual Studio下载和安装
- 2.5 信道的极限容量
热门文章
- 挺全的HTML、CSS整理笔记
- 20200909 Vedio Game 游戏平台数据分析
- js获取当前是第几周
- 数学建模最新教育数据分享及数据查询方法(数据来源:世界银行、世界数据图册、联合国教科文组织、国家统计局)
- 巴比特 | 元宇宙每日必读:蒂芙尼宣布推出限量版 CryptoPunk 定制吊坠
- 台式电脑计算机怎么看是固态硬盘,怎么看电脑是机械硬盘还是固态硬盘
- python f 格式字符串输出
- JVM - 垃圾回收(垃圾标记阶段算法,内存泄漏与溢出)(2)
- 区块链ICO新加坡基金会法律意见书有哪些作用?
- MySql查询某一天的数据