• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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,mysql,SqlServer三种数据库的分页查询的实例
    • Oracle实现分页查询的SQL语法汇总
    • Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍
    • Oracle分页查询性能优化代码详解
    • mysql、mssql及oracle分页查询方法详解
    • 详解SQLServer和Oracle的分页查询
    • 详解oracle分页查询的基础原理
    • oracle实现一对多数据分页查询筛选示例代码
    • Oracle使用MyBatis中RowBounds实现分页查询功能
    • 简单实例解释Oracle分页查询
    上一篇:oracle数据匹配merge into的实例详解
    下一篇:win10下oracle 11g安装图文教程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle分页查询的实例详解 Oracle,分页,查询,的,实例,