`

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,SQl,MySql实现分页查询

    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为...

    Oracle分页查询的实例详解

    Oracle分页查询的实例详解 1.Oracle分页查询: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM tab) A WHERE ROWNUM &lt;= 40 ) WHERE RN &gt;= 21; 这个分页比下面的执行时间少,效率高。  2. ...

    asp.net使用oracle分页存储过程查询数据

    功能说明 写好oracle的连接字符串和查询语句,调用程序中的方法可以很方便的实现分页功能。该方法中,将参数连接字符串,查询的sql语句,... 效率不是很高,如有高人写出很厉害的分页存储过程,希望您与大家分享。

    oracle 高效分页

    oracle 高效分页,使用SQL语句控制所查询出的行号

    Oracle实现分页查询的SQL语法汇总

    本文实例汇总了Oracle实现分页查询的SQL语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法。(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响...

    oracle分页操作

    上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM 这句上。 选择第21到40条记录存在两种...

    ORACLE9i_优化设计与系统调整

    §6.1 何时优化效率最高 85 §6.1.1 系统设计阶段和开发阶段的优化 85 §6.1.2 改善产品系统的优化 85 §6.2 优化的优先步骤 86 §6.2.1 步骤1:优化商业规则 86 §6.2.2 步骤2:优化数据设计 87 §6.2.3 步骤3:...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    FastBuilder:FastBuilder是一个快速开发以及高性能,高扩展性的ORM框架,灵活支持多数据库切换,读写分离,同时支持Mysql和Oracle数据库, 并且上手快,在DAO层开发效率节约50%以上, 欢迎加入FastBuilder技术交流群:236719790

    FastBuilder是一个快速开发以及高性能,高扩展性的ORM框架,灵活支持多数据库切换,读写分离,同时支持Mysql和Oracle数据库, 并且上手快,在DAO层开发效率节约50%以上, 欢迎加入FastBuilder技术交流群:236719790 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例271 清理SESSION缓存提高网站访问的效率 358 第6章 图形图像处理 361 6.1 图像与统计 362 实例272 图形计数器 362 实例273 GD2图形计数器 363 实例274 通过图像显示投票统计结果 365 实例275 通过图像显示密码...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例271 清理SESSION缓存提高网站访问的效率 358 第6章 图形图像处理 361 6.1 图像与统计 362 实例272 图形计数器 362 实例273 GD2图形计数器 363 实例274 通过图像显示投票统计结果 365 实例275 通过图像显示密码...

    Winson.Framework 3.3源码

    求达到更高的灵活性和效率。此框架主要是以实体类为主的数据操作,通过此框架,所有对实体的赋值和增、删、改、查等操 作都 已变得非常易和简便,而且也可以支持多种数据库。 当然,除了对数据的操作外,还有其他...

    Winson.Framework v3.3.rar

    求达到更高的灵活性和效率。此框架主要是以实体类为主的数据操作,通过此框架,所有对实体的赋值和增、删、改、查等操 作都 已变得非常易和简便,而且也可以支持多种数据库。  当然,除了对数据的操作外,还有...

    AppFramework_V1.0_New

    众所周知Oracle提供了ROWNUM实现数据数据库内分页功能,若要利用这一特性,就要在SQL模板里直接硬编码这些特殊语法,这必然导致大量的移植工作。 &lt;br&gt;第八、缺少代码生成和检查工具。程序里的变量名与Sql模板里的...

    AppFramework_V1.0

    众所周知Oracle提供了ROWNUM实现数据数据库内分页功能,若要利用这一特性,就要在SQL模板里直接硬编码这些特殊语法,这必然导致大量的移植工作。 &lt;br&gt;第八、缺少代码生成和检查工具。程序里的变量名与Sql模板里的...

    PetaPoco:适用于.NET的微型ORM

    运行效率据称也较高,比较接近原生SQL操作。 db.Query("SELECT * FROM articles"); //直接SQL语句 db.Page(1, 20, "SELECT * FROM articles WHERE category=@0 ORDER BY date_posted DESC", "coolstuff"); //...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    众所周知Oracle提供了ROWNUM实现数据数据库内分页功能,若要利用这一特性,就要在SQL模板里直接硬编码这些特殊语法,这必然导致大量的移植工作。 &lt;br&gt;第八、缺少代码生成和检查工具。程序里的变量名与Sql模板里的...

    EfsFrame(java开发框架) v2.2 源代码.rar

    c)修正分页列表中下面分页条中 分页那里直接输入数字,回车不跳页的问题; d)修改 一个form中同时存在两个datetime的input时,第二个不能选择时分的bug; e)增加 input的 kind与datatype的自动对应关系默认对应...

Global site tag (gtag.js) - Google Analytics