Oracle分页查询的实例详解

 更新时间:2017年10月19日 15:17:31   作者:zw7534313  
这篇文章主要介绍了Oracle分页查询的实例详解的相关资料,希望通过本文能帮助到大家实现理解这部分内容,需要的朋友可以参考下

Oracle分页查询的实例详解

1.Oracle分页查询:

SELECT * FROM 
( SELECT A.*, ROWNUM RN FROM 
    (SELECT * FROM tab) A 
    WHERE ROWNUM <= 40 ) 
       WHERE RN >= 21;

这个分页比下面的执行时间少,效率高。 

2.

select * from 
    (select c.*,rownum rn from tab c) where rn between 21 and 40

 对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。】因此,对于第二个查询语句,
Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,
显然这个效率要比第一个查询低得多。

上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

3.下面简单讨论一下多表联合的情况。对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式

NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。
在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时
可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。
那么在大部分的情况下,对于Oracle分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率
(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

SELECT /*+FIRST_ROWS*/ * FROM     ---hint 提示,优化查询
( SELECT A.*, ROWNUM RN FROM 
    (SELECT * FROM tab) A 
    WHERE ROWNUM <= 400 ) 
       WHERE RN >= 380

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Oracle数据库在指定字段后新增字段代码举例

    Oracle数据库在指定字段后新增字段代码举例

    很多时候数据库中已有表的字段与需求业务所需字段有差异,需要增加一个或多个字段,这篇文章主要给大家介绍了关于Oracle数据库在指定字段后新增字段的相关资料,需要的朋友可以参考下
    2023-09-09
  • oracle定义常用函数的过程

    oracle定义常用函数的过程

    这篇文章主要介绍了oracle定义常用函数的过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 45个非常有用的 Oracle 查询语句小结

    45个非常有用的 Oracle 查询语句小结

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快收藏吧
    2014-04-04
  • Oracle 存储过程总结(一、基本应用)

    Oracle 存储过程总结(一、基本应用)

    Oracle 存储过程总结 基本应用技巧,大家可以学习下oracle存储过程最基本的东西。
    2009-07-07
  • oracle 身份证校验函数的实例代码

    oracle 身份证校验函数的实例代码

    这篇文章主要介绍了oracle 身份证校验函数,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Oracle通过sqlplus连接数据库的方式

    Oracle通过sqlplus连接数据库的方式

    今天小编就为大家分享一篇关于Oracle通过sqlplus连接数据库的方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 收集的ORACLE函数大全

    收集的ORACLE函数大全

    收集的ORACLE函数大全...
    2007-03-03
  • Oracle 数据库忘记sys与system管理员密码重置操作方法

    Oracle 数据库忘记sys与system管理员密码重置操作方法

    这篇文章主要介绍了Oracle 数据库忘记sys与system管理员密码重置操作,需要的朋友可以参考下
    2017-06-06
  • Oracle 手动创建数据库步骤详解

    Oracle 手动创建数据库步骤详解

    本文给大家介绍oracle手动创建数据库步骤,需要的朋友可以参考下
    2015-10-10
  • Oracle 数据库优化实战心得总结

    Oracle 数据库优化实战心得总结

    优化sql语句、优化io、表设计优化、充分利用系统cpu资源、优化数据库连接、充分利用数据的后台处理方案减少网络流量,实施系统资源管理分配计划等等,感兴趣的朋友可以参考下哈
    2013-06-06

最新评论