优化体系–Oracle分页查询的3种实现方案,值得收藏[通俗易懂]

优化体系–Oracle分页查询的3种实现方案,值得收藏[通俗易懂]概述今天主要介绍一下Oracle的分页的一个实现方式,也是最近在做部门培训时介绍的一个新特性,下面介绍下测试的一个实验。

大家好,欢迎来到IT知识分享网。

概述

今天主要介绍一下Oracle的分页的一个实现方式,也是最近在做部门培训时介绍的一个新特性,下面介绍下测试的一个实验。


1、环境准备

准备测试数据267万

CREATE TABLE t AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;
insert into t select * from t;
/
/
.....

IT知识分享网

优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]

优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]


2、需求

需求:按照对象ID排序,取第21条到30条记录。

大家可以思考下碰到这种情况应该怎么实现?


3、实现方案1

这里用rownum分页查询的写法实现:

IT知识分享网set timing on;
SELECT OBJECT_ID, OBJECT_NAME FROM (SELECT ROWNUM RN, A.* FROM (SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY OBJECT_ID) A WHERE ROWNUM <= 30) WHERE RN > 20;
优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]

查看执行计划

优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]


4、实现方案2

这里主要用前面介绍的分析函数实现:

SET TIMING ON;
SELECT OBJECT_ID, OBJECT_NAME FROM (SELECT ROW_NUMBER() OVER(ORDER BY OBJECT_ID) RN, OBJECT_ID, OBJECT_NAME FROM T) WHERE RN <= 30 AND RN > 20;
优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]

查看执行计划:

性能倒没有太大的变化

优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]


5、实现方案3

Database 12c的FETCH FIRST ROWS特性可以简化老版本中ROW_NUM()或ROWNUM的分页排序写法, 大幅节约开发花在分页查询语句上的时间。

row-limiting子句用以限制某个查询返回的行数

  • 可以通过FETCH FIRST/NEXT关键字指定返回结果的行数
  • 可以通过PERCENT关键字指定返回结果的行数比例
  • 可以通过OFFSET关键字指定返回从结果集中的某一行之后行数

12c row-limiting子句对于排序数据限制返回行今后会广泛使用(MySQL上早就有的特性,MySQL开发该特性可能是特别考虑到对于网站分页查询的简化),也可以被称作Top-N查询。

这个是属于12c的新特性了,刚好没有相关环境,所以就不列出执行计划了。

IT知识分享网SET TIMING ON;
--12c才有
SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY OBJECT_ID OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]


加上前面主要分享了4个Oracle的新特性,这4个新特性都有不同的应用场景,建议大家多去练习掌握。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

优化体系--Oracle分页查询的3种实现方案,值得收藏[通俗易懂]

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6519.html

(0)
上一篇 2022-12-15 22:00
下一篇 2022-12-15 22:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信