`
qindongliang1922
  • 浏览: 2186276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117595
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125974
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59956
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71335
社区版块
存档分类
最新评论

oracle下的两种分页方式适用场景

阅读更多
首页,笔者先把两种最常用的Oracle分页方式sql语句贴出来,另外说明下笔者要查询的表有2000多万数据
第一种:

select *  from  (select rownum a, ARTICLEW.XMLDOC from ARTICLEW ) t                where t.a between 1 and 200 ;

第二种:
select *  from    (select rownum,  t.*   from    (select xmldoc from articlew) t   where t.rownum<=200)  where rownum >=1



近日,使用oracle数据库时,需要从一个千万级的数据表里面读取数据,没办法了,只能写分页读了,而且查询字段还涉及一个Blob类型的大字段,结果按照第一种分页方式去读,就一次取200条测试数据,结果发现数据库一直在查询,20多秒还没返回结果,我想应该不是数据库的问题,而是sql语句的问题了,于是换了第二种的分页查询,发现很快就能返回,对于第一种分页查询的方式,个人感觉内部可能做全表扫描了,所以就算分页数据量很小,但只要数据量大的情况,其性能极为低下,因此只适合做小批数据量的分页展示,而第二种分页方式性能就高多了,尤其是在大数据量的表里


这两种写法,大多数情况下,第二种都比第一种的效率高,为什么?

这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第二个查询语句,第二层的查询条件WHERE ROWNUM <= 200就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就立即终止查询,仅仅把我们所需要的数据拿出来,是真正的按需所取。

对于第一个分页查询的语句,Oracle内部,首先会做全表扫描,把所有符合条件的数据,全部返回,而真正的我们分页所需要的数据,仅仅是在Between 和and之后才进行过滤筛选的,所以,在数据量越大的情况下,第一种的分页查询的语句的性能就越低,这也就是为什么我只取仅仅200数据,oracle竟然用20多秒都没返回的原因。


最后,对于上面的2种分页方式,简单总结一下,第一种:获取全部,进行筛选,第二种:按需所取。举个不太恰当的比方,就是有点像EJB跟Spring的区别。


分享到:
评论

相关推荐

    oracle认证详解Oracle的几种分页查询语句

    ### Oracle认证详解:Oracle的几种分页查询语句 #### 分页查询背景及重要性 在数据库管理系统(DBMS)中,特别是在Oracle这样的大型关系型数据库中,分页查询是一种非常实用的技术。它允许用户根据需求获取特定...

    oracle分页查询sql

    在Oracle数据库中,实现分页查询主要有两种方式:基于`ROWNUM`和基于`OFFSET`和`FETCH`。在早期版本的Oracle中,通常使用`ROWNUM`来实现分页功能。 #### 三、基于ROWNUM的分页查询 基于`ROWNUM`的分页查询是Oracle...

    oracle存储过程通用分页

    Oracle存储过程是数据库管理...总之,Oracle存储过程通用分页是一种优化数据库查询性能、改善用户体验的有效方法。通过理解分页原理,选择合适的分页策略,以及熟练运用存储过程,开发者可以在处理大数据时游刃有余。

    Oracle 分页存储过程

    在Oracle数据库中,分页查询是一项常见的操作,特别是在大数据量的场景下,为了提高用户体验,我们需要快速有效地获取数据的一部分,而不是一次性加载所有记录。这里我们将深入探讨如何利用Oracle的存储过程来实现...

    SQL Server 存储过程及Oracle SQL语句分页

    而Oracle的分页SQL语句更为简洁,适合在不支持存储过程或者简单场景下使用。但需要注意的是,Oracle的`ROWNUM`方式在处理有序数据时可能会有性能问题,因为`WHERE ROWNUM`条件可能无法充分利用索引。 在实际应用中...

    oracle 高效分页

    在Oracle中,`ROW_NUMBER()`和`ROWNUM`是实现分页查询的两种主要方式。其中,`ROW_NUMBER()`函数是在SQL标准中的窗口函数,它可以为每一行分配一个唯一的行号,而这个行号的顺序可以基于某一列的排序规则。`ROWNUM`...

    oracle 分页语句

    通过以上分析,我们可以看出Oracle中使用`ROWNUM`实现分页查询是一种简单有效的方法。然而,在实际应用中还需要结合具体场景,考虑查询性能、索引利用等因素,以达到最佳的效果。希望本文能够帮助大家更好地理解和...

    Oracle真分页。源码

    传统的ROWNUM分页方式在某些场景下可能无法满足需求,特别是在数据量过大或需要跨多行进行排序时,会出现效率低下甚至错误的结果。因此,“Oracle真分页”概念应运而生,它旨在提供一种更高效、更准确的分页解决方案...

    Oracle数据库通用的分页存储过程

    Oracle数据库中实现分页查询主要有两种方法:ROWNUM和ROW_NUMBER()函数,这里我们主要讨论通过存储过程实现的通用分页方法。 一、ROWNUM方法 ROWNUM是Oracle数据库中的一个伪列,它会为每一行分配一个唯一的整数,...

    oracle mysql SQL server分页

    下面将介绍两种常用的Oracle分页查询方法: 1. **基础分页查询**: ```sql SELECT * FROM ( SELECT t.*, ROWNUM rn FROM table_name t WHERE ROWNUM ORDER BY attribute_id DESC ) WHERE rn &gt;= 6 ORDER ...

    JSP+JDBC_真分页(基于Oracle数据库分页)笔记

    这两种方法各有优缺点,适用于不同的场景。 ### 1. 假分页 假分页是一种基于程序逻辑实现的分页方法。它并不依赖于数据库的特定功能,而是通过程序计算出当前页所需的数据,并从数据库中获取所有数据,然后在内存...

    Oracle的分页查询语句.docx

    对 于多表联合查询,Oracle 可以使用 NESTED LOOP 和 HASH JOIN 两种连接方式。其中,NESTED LOOP 在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而 HASH JOIN 必须处理完所有结果集。因此,在大部分...

    spring mvc实现Oracle分页

    在分页场景中,我们可以使用LigerUI的分页控件,提供直观的翻页操作。 jEditable则是用于使网页元素可编辑的jQuery插件,允许用户直接在页面上修改数据,提高交互性。例如,用户可以直接在表格中编辑某一记录,然后...

    spring+ibatis+oracle分页缓存源码

    在分页查询场景下,Oracle提供了一系列优化手段,如ROWNUM伪列、索引、物化视图等,来提高查询效率。在本项目中,Oracle可能被用作存储数据的后端,通过SQL查询实现分页功能。 分页缓存则是为了提升用户体验和系统...

    jsp+JavaBean+Servlet_Oracle和Mysql分页

    在分页场景下,Servlet接收到JSP页面传递的分页参数,执行相应的SQL查询,获取分页数据,然后将结果返回给JSP进行渲染。Servlet还能管理数据库连接,确保资源的有效利用。 4. Oracle数据库分页:Oracle支持多种分页...

    java分页 的3种方法

    在Java开发中,分页是常见的数据处理方式,特别是在大数据量的展示场景下,它可以有效减少内存负担,提高用户体验。本篇文章将详细讲解在Oracle数据库环境下,Java实现分页的三种方法。 一、JDBC手动分页 1. **...

    oracle 分页的部分

    接下来,我们通过一个简单的例子来比较两种分页方法的性能差异。假设我们有一个名为`T`的大型表,包含457992条记录,现在我们分别使用两种方法查询第11至20条记录: ```sql -- 第一种方法 SELECT OBJECT_ID, OBJECT...

    oracle存储过程分页.docx

    在处理大规模数据时,这两种存储过程都能显著提升分页查询的速度。然而,它们依赖于特定的查询结构和数据库设计,因此在某些复杂场景下可能需要进行微调。此外,对于更现代的数据库系统,可能有更优化的分页解决方案...

    oracle调用存储过程实现分页

    在Oracle数据库中,分页查询是一项常见的操作,特别是在大数据量的场景下,为了提高用户体验和系统性能,我们通常不会一次性加载所有数据,而是分批次(即分页)展示。存储过程是Oracle数据库中预编译的SQL语句集合...

    oracle 存储过程分页

    Oracle数据库提供了多种实现分页的方法,其中使用存储过程进行分页是一种非常高效且灵活的方式。 #### 二、存储过程设计 本节将详细分析提供的存储过程代码,以帮助理解其实现原理及使用方法。 #### (一)存储...

Global site tag (gtag.js) - Google Analytics