`
xia562653223
  • 浏览: 6946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle分页查询

阅读更多
看到过三种分页查询语句

1.一般我们会用这个语句:

SELECT * FROM(
    SELECT A.*, ROWNUM RN
    FROM (SELECT * FROM TABLE_NAME) A
    WHERE ROWNUM <= 20
)
WHERE RN >= 11

     由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于这个查询语句,第二层的查询条件WHERE ROWNUM <= 20就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了

2.绝大多数的情况下这个效率要比第一个低

SELECT * FROM(
    SELECT A.*, ROWNUM RN
    FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 11 AND 20

     由于查询条件BETWEEN 11 AND 20是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层。

3.两层嵌套查询

SELECT * FROM(
    SELECT A.*,ROWNUM RN FROM TABLE_NAME A
)
WHERE RN BETWEEN 11 AND 20


       经过验证(特殊条件除外):第一种的执行时间最短,后面两个差不多。
 
     如果数据量很大的话可能会出现问题:

 
先说下oracle读取记录的顺序:
     Oracle会根据具体的数据块的存储返回记录。oracle数据库是没有默认排序的,要排序必须加上order by 。因为 oracle是按块进行读取数据的。如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序,oracle没有进行任何排序操作,rowid表示的是数据存放的数据块内部地址,如果没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端,不过看起来好像是按照rowid排序似的。如果数据量足够大,即使相同的语句,都有可能不同的结果。一般而言:表是堆表,所以是无序的他是按照也即物理存放顺序来读取的。rowid 是自动随行生成的。
      此时的排序就需要加order by(或者你需要按照某个字段分页也会用到order by)。
      前两种可以在第一层里面加上order by完全没问题。
      第三种也就是两层嵌套查询即使第一层加上order by。因为rownum在每查出一条记录就从1开始递增赋值,最后才order by排序。这样order by就完全没有意思。因为你最后还是按照rownum过滤的,所以第三种在这就行不通了。
     综上所述:还是用第一种效率会高,如果需要order by可以在第一层加上。
      一个简单的表的实验:11万条数据他们的查询时间:0.015,0.031,0.031
      虽然他们相对时间是有差距的,但是时间都是很短的。影响程序效率的一般都会是连接数据库的次数。我们主要应该关注的是少连几次数据库。
分享到:
评论

相关推荐

    oracle分页查询sql

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

    oracle分页查询并返回总记录数据存储过程

    ### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...

    ORACLE分页查询效率

    根据所提供的信息,我们可以提炼出以下关于“ORACLE分页查询效率”的相关知识点: ### 一、Oracle中的分页查询 #### 1.1 分页查询的重要性 - **背景介绍**:在实际应用中,数据库查询结果往往非常庞大,一次性加载...

    oracle分页查询

    Oracle 分页查询详解 Oracle 分页查询是指从大型数据表中提取指定范围的记录,以便提高查询效率和减少数据传输量。常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法...

    msql和oracle分页查询语句笔记

    msql和oracle分页查询语句笔记

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

    Oracle 分页查询优化与排序解决方案 本文主要解决 Oracle 分页查询中排序与效率问题,通过实践和分析,提供了两种解决方案,并对比了两种方法的优缺点。 知识点 1: Oracle 分页查询的基本概念 Oracle 分页查询是...

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

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

    Oracle分页查询(很不错的介绍)

    首先,理解Oracle分页查询的基本结构。通常,Oracle的分页查询采用嵌套查询的方式实现。以下是一个典型的分页查询模板: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A ...

    Oracle分页查询Oracle分页查询

    ### Oracle分页查询详解 #### 一、引言 在数据库应用中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的数据检索技术。Oracle作为一种广泛使用的数据库管理系统,支持多种方式进行分页查询。本文...

    Oracle分页查询技术

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

    Oracle分页查询语句

    Oracle分页查询语句的学习和示例演练

    java web与Oracle数据的分页功能

    2. **构造SQL查询语句**:Oracle数据库支持使用`ROWNUM`进行分页查询。基本的SQL模板为: ```sql SELECT * FROM (SELECT t.*, ROWNUM rnum FROM (YOUR_SELECT_QUERY) t WHERE ROWNUM ) WHERE rnum &gt;= :startRow `...

    oracle的分页查询

    Oracle 的分页查询 在 Oracle 中,分页查询是非常常见的需求,但是在使用查询条件时又不能使用大于号(&gt;)。本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一...

    Oracle分页(limit方式的运用)

    ### Oracle分页(LIMIT方式的运用) 在数据库查询操作中,分页是非常常见的需求之一,尤其是在数据量较大的情况下,为了提高用户体验以及减轻服务器压力,...希望本文能为你理解和掌握Oracle分页查询提供一定的帮助。

Global site tag (gtag.js) - Google Analytics