`

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中的分页查询 #### 1.1 分页查询的重要性 - **背景介绍**:在实际应用中,数据库查询结果往往非常庞大,一次性加载...

    如何解决Oracle分页查询中排序与效率问题

    ROWNUM 是 Oracle 专门用于分页查询的伪列,OFFSET Fetch 是 Oracle 12c 及更高版本中引入的分页查询方法。 知识点 2: 分页查询中的排序问题 在分页查询中,如果在 ORDER BY 子句中指定了排序列,会出现排序列不是...

    解决Oracle分页查询中排序与效率问题

    ### 解决Oracle分页查询中排序与效率问题 在Oracle数据库中进行分页查询时,经常会出现性能瓶颈,尤其是在处理大数据量的情况下。本篇文章将详细探讨如何优化Oracle分页查询中的排序与效率问题。 #### 一、理解...

    oracle分页查询sql

    ### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...

    oracle分页查询

    Oracle 12c 及更高版本支持 ROW_NUMBER() 函数,可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) RN FROM TABLE_NAME) WHERE RN BETWEEN 21...

    Oracle的分页查询语句 Oracle分页的存储过程

    这种方法在大多数情况下效率较高,因为Oracle的 Cost-Based Optimizer (CBO) 可以将外层的`ROWNUM`限制推入内层查询,一旦达到限制,查询就会立即停止,从而减少不必要的数据处理。 另外一种分页查询的方法是使用`...

    Oracle的分页查询语句.docx

    "Oracle分页查询语句详解" Oracle 的分页查询语句是数据库查询中的一种优化手段,用于控制查询结果集的大小,以提高查询效率。在 Oracle 中,分页查询语句可以使用 ROWNUM 和子查询来实现。本文将详细介绍 Oracle ...

    Oracle的SQL分页实践

    在Oracle 9i及更高版本中,可以使用ROWNUM伪列进行分页。ROWNUM是在查询结果集生成时被赋予的数值,表示行的顺序。例如,如果我们想要获取前10条记录,可以使用以下查询: ```sql SELECT * FROM ( SELECT t.*, ...

    spring+ibatis+oracle分页缓存源码

    总的来说,"spring+ibatis+oracle分页缓存源码"项目展示了如何在Spring管理的环境中,利用iBatis和Oracle数据库实现高效的数据分页和缓存策略。通过理解和实践这些技术,开发者可以构建出更加健壮、响应快速的Web...

    Oracle分页查询技术

    ### Oracle分页查询技术 在Oracle数据库中,实现分页查询是常见的需求之一,尤其是在处理大量数据时。本文将详细介绍如何使用Oracle进行有效的分页查询,并深入探讨其背后的原理及优化策略。 #### 分页查询的基本...

    SSH+ORACLE通用分页

    在Oracle数据库中,进行分页查询通常涉及SQL的`ROWNUM`或`ROW_NUMBER()`函数,以及子查询或嵌套查询。`ROWNUM`在早期版本的Oracle中被广泛使用,它会为每行数据分配一个唯一的数字,通过与特定范围的比较来获取指定...

    Oracle分页存储过程

    ### Oracle分页存储过程解析与应用 在数据库管理和应用程序开发中,处理大量数据时,分页查询是一项常用且重要的技术。Oracle数据库提供了多种方法来实现数据分页,其中使用存储过程进行分页是一种高效且灵活的方式...

    Oracle 分页的存储过程

    总结来说,Oracle分页存储过程是通过动态构造SQL语句,结合输入的分页参数,计算出总页数,并返回指定页的数据。这种方式在处理大量数据时提高了效率,同时也提供了灵活的查询控制。通过包装这些逻辑在存储过程中,...

    oracle分页,比较简单很好懂

    本篇文章将深入探讨Oracle分页的机制,并提供易于理解的示例。 首先,我们来看SQL标准的`OFFSET-FETCH`和`LIMIT`子句。虽然`LIMIT`不是Oracle的原生语法,但Oracle 12c引入了`FETCH FIRST n ROWS ONLY`和`OFFSET m ...

    Oracle All 添加 修改 更新 Oracle分页 emp表 存储过程实现

    但请注意,当emp表有大量数据且频繁进行分页查询时,考虑使用索引优化排序字段以提高查询效率。 此外,Oracle还提供了游标(CURSOR)等高级特性,可以进一步增强存储过程的功能。例如,通过游标可以在存储过程中...

    oracle 高效分页

    传统的分页方法可能会导致性能瓶颈,尤其是在数据量巨大、查询复杂度高的场景下。因此,掌握Oracle中的高效分页技术对于优化数据库性能至关重要。 ### 核心概念:ROW_NUMBER()与ROWNUM 在Oracle中,`ROW_NUMBER()`...

    ORACLE分页查询SQL语法

    本文将详细介绍Oracle中分页查询的SQL语法,并对比不同方法的效率。 1. **无ORDER BY排序的写法**: 这种方式的效率最高,因为它避免了额外的排序操作。示例代码如下: ```sql SELECT * FROM ( Select ROWNUM ...

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

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

    oracle分页存储过程千万级

    本文将基于给定的“oracle分页存储过程千万级”文件信息,深入解析其核心概念、设计思路及实现细节。 ### 核心概念解析 #### 1. 存储过程(Stored Procedure) 存储过程是一种预编译的SQL代码块,存储在数据库...

    Oracle分页查询的实例详解

    以下是对Oracle分页查询的实例详解: 1. **Oracle分页查询基础** Oracle分页查询通常涉及ROWNUM伪列的使用。ROWNUM在查询执行过程中为每一行分配一个唯一的数字,从1开始递增。在以下两个示例中,我们可以看到两种...

Global site tag (gtag.js) - Google Analytics