Oracle 分页
来源:互联网 发布:胆码预测软件 编辑:程序博客网 时间:2024/05/15 10:53
分页查询格式:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
1.根据ROWID来分
select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) ;
执行时间0.03秒
2.按分析函数来分
select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;
执行时间1.01秒
3.按ROWNUM来分
select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where
rn>9980;执行时间0.1秒
其中t_xiaoxi为表名称,cid为表的关键字段,取按CID降序排序后的第9981-9999条记录,t_xiaoxi表有70000多条记录
个人感觉1的效率最好,3次之,2最差
- oracle分页
- oracle分页
- Oracle分页
- Oracle分页
- oracle分页
- oracle分页
- oracle分页
- oracle分页
- oracle分页
- oracle分页
- Oracle分页
- oracle分页
- Oracle分页
- Oracle分页
- Oracle 分页
- Oracle 分页
- oracle-分页
- Oracle分页
- 【HDOJ】1032 -> The 3n + 1 problem
- Annotation 注解
- C# 打开PPT文件另存为PPTX
- 黑马程序员————集合、泛型集合、文件管理、目录管理以及文档流
- 面试宝典
- Oracle 分页
- 十进制小数与二进制小数之间的互相转换
- 纯CSS实现各类气球泡泡对话框效果
- Ogre相关的物理引擎
- 工作一年小结
- Android核心基础(二)
- MYSQL 分页
- Linux内核双向链表的增删查操作
- window下右键无新建txt