Oracle 分页查询模板
2016-05-06 08:58
525 查看
Oracle分页查询方法一共有三种:
一、rowid效率最高二、分析函数效率最差
三、ROWNUM
这里只说第三种,因为我认为第三种可读性比较高,效率也比较好,大约比第一种效率差一到二倍,和第二种相比快一个数量级。
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
这个SQL我们可以当一个模板,只需要修改table_name,40,21就可以了。
有几个要注意的地方说下:
①rownum<=40为什么不加上外层的>=21?大家可以试一下rownum<=40 and rownum>=21,是查不出结果的,在这一层select中rownum只能用一次;或者rownum<=40 and Rn>=21,内层循环不能识别RN;
②为什么不用betwwen?用 RN betwwen 21 and 40 效率比较低,内层循环返回给外层的都是全量数据,而第一种子查询是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了;
③这个可以当做模板,我们只需要修改内层循环就可以达到大部分的要求,例如换表只需要修改最内层子查询的表名,排序也只需要在最内层子查询加排序条件
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE2 order by column2 desc) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
相关文章推荐
- Oracle 11g之LogMiner简介
- 数据库oracle与mysql在语法上的区别
- 修改Oracle 11gR2 RAC SCAN监听和本地监听端口
- Oracle 11gR2 RAC DBCA无法识别ASM磁盘组
- win7下非管理员用户使用sqlplus 10.2.0.1版本遇到的问题--SP2-1503: Unable to initialize Oracle call interface
- Oracle SQL脚本搜集
- Oracle 10g 关于控制文件的等待事件
- Oracle 11G在用EXP 导出时,空表不能导出解决
- Oracle基本数据类型
- Windows 7操作系统安装Oracle 10g数据库的方法
- oracle数据库删除数据Delete语句和Truncate语句的对比
- 查看ORACLE中正在运行的存储过程 kill
- Oracle体系结构
- Oracle基础 -- SQLPlus如何查看procedure的内容
- oracle dba create view 失败 解决办法
- oracle 参考
- Oracle学习系列2
- Oracle学习系列1
- Centos 5 Oracle 11G 超详细安装
- Centos 6 Oracle 12C 超详细安装