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

Oracle row_number() over()解析函数高效实现分页

    博客分类:
  • sql
阅读更多

在刚出来工作时!当时还没接触Oracle时候,做的第一个项目用来ibatis

当时在做分页的时候用的是ibatis自带的分页功能方法queryForPaginatedList(java.lang.String id, int pageSize),

http://ivanl.iteye.com/blog/24739

http://www.iteye.com/topic/544765

这里有详细分析,ibatis并不能像hibernate那样识别数据库并调用相应的

分页策略

 

 后来改用了mysql物理分页limit ,例如     select  * from  test  limit  1 to 20
mysql 的分页是先按照条件分页得到数据后才分配行号,这点和Oracle正好相反,这也是为什么在分析函数没出来之前

用的是三层嵌套的分页方式而且效率很低。

Oracle的分页如

--第1页
SELECT ROWNUM r,t.* FROM (
   SELECT t.* FROM test     ) t
WHERE ROWNUM between 1 AND 20

 

--麻烦,效率低!


-- 用row_number() over()函数 效率变高了
select t.* from
    (select t.*,row_number()over(order by null) orderNumber from test t )t

where orderNumber between 1and 3;  

分享到:
评论
1 楼 iamlotus 2010-01-10  
应该用
SELECT ROWNUM r,t.* FROM (
   SELECT t.* FROM test    where rownum<=20 ) t
WHERE r >=1

如果有order by的话才是三层

select *
from(
select rownum, rn, t.* from
(select ts.* from test ts order by XXX) t where rownum<=20
) where t.rn<=1

你用between rownum作当然慢,最外层的条件推不进去,看执行计划就知道了,没法用order by stopkey的。
对于分页取前面某页,三层+ select first rows的hints比解析函数还要快点。只有在数据量很大又是取后面某页的时候解析函数才会快。

相关推荐

    oracle分析函数row_number() over()使用

    Oracle的分析函数`ROW_NUMBER() OVER()`是一种强大的工具,用于在查询结果集中为每一行分配一个唯一的序列号。这个函数通常用于数据分页、排名或者为特定条件的记录分配顺序。下面我们将详细讨论`ROW_NUMBER() OVER...

    解析函数高效实现分页

    本文将详细介绍如何利用Oracle中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...

    深入探讨:oracle中row_number() over()分析函数用法

    Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...

    使用row_number()实现分页实例

    总之,`ROW_NUMBER()`函数在SQL Server中是实现高效分页查询的重要工具。通过正确地设置参数和理解其工作原理,可以轻松地在大量数据中实现分页浏览,提高用户体验。同时,要注意不同数据库系统可能存在的语法差异,...

    各数据库分页语法支持

    Oracle 支持多种分页方式,包括三层嵌套分页、ROW_NUMBER() 函数分页及 ROWNUM 控制最大条数的方法。 1. **三层嵌套分页**: ```sql SELECT * FROM ( SELECT row_.*, ROWNUM as rownum FROM ( SELECT sid ...

    oracle 高效分页

    高效分页在Oracle数据库中是通过利用如`ROW_NUMBER()`这样的窗口函数或`ROWNUM`伪列来实现的。为了更好地管理大型数据集的查询,开发者应熟悉这些技术,并根据具体需求选择最合适的方案。此外,封装分页逻辑到存储...

    oracle分页程序的实现

    在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...

    Oracle数据库rownum和row_number的不同点

    在Oracle数据库中,`ROWNUM` 和 `ROW_NUMBER()` 是两个不同的概念,它们在处理结果集的排序和分页方面有着显著的区别。 首先,`ROWNUM` 是Oracle数据库中的一个伪列,它在查询执行的过程中动态生成。当查询执行时,...

    Oracle 存储过程分页

    总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...

    Oracle分页

    总结来说,Oracle分页主要通过ROWNUM和ROW_NUMBER()函数实现,其中ROW_NUMBER()更为灵活且适用于复杂场景。合理利用索引和动态分页策略,可以提高查询效率和用户体验。在设计分页系统时,需兼顾性能和用户体验,为...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle 12c引入了窗口函数ROW_NUMBER(),可以更优雅地实现分页。例如: ```sql WITH data AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY some_column) row_num FROM your_table ) SELECT * FROM data WHERE row_...

    分页代码Oracle

    理解分页的基本原理和Oracle提供的函数,结合实际编程环境,可以有效地实现高效、灵活的分页功能。对于初学者而言,可能需要一定的实践和调试才能完全掌握,但随着经验的增长,你会发现分页查询其实并不复杂。

    oracle分析函数

    ### Oracle分析函数详解:row_number() over 在Oracle数据库中,分析函数(Analytic Functions)是一种强大而灵活的数据处理工具,它们能够在查询结果集中对每一行数据进行计算,而不像传统的聚合函数那样只返回...

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

    Oracle数据库中实现分页查询主要有两种方法:ROWNUM和ROW_NUMBER()函数,这里我们主要讨论通过存储过程实现的通用分页方法。 一、ROWNUM方法 ROWNUM是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&JSP分页和Oracle分页

    另一种更高效的方法是使用Oracle的`ROW_NUMBER()`函数,配合`OVER()`子句,这样可以实现更复杂的分页逻辑。比如,如果我们要查询第5页的数据,每页20条,可以这样写: ```sql SELECT * FROM ( SELECT ROW_NUMBER()...

    Oracle 高效分页存储过程(修改)

    在Oracle数据库管理中,高效地实现分页查询是优化数据库性能的重要一环,尤其是在处理大量数据时。分页存储过程可以极大地提升用户体验,因为它允许用户逐步加载数据,而不是一次性加载所有记录,从而节省网络资源和...

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

    这需要在数据库层面编写特定的SQL查询,利用Oracle的ROWNUM或者ROWNUMBER()函数来限制返回的记录数,从而实现高效的数据分页。例如,以下是一个简单的示例: ```sql SELECT * FROM (SELECT ROW_NUMBER() OVER ...

Global site tag (gtag.js) - Google Analytics