承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601
当前位置:首页  >  互联网圈  >  Oracle分页查询的实例详解

Oracle分页查询的实例详解

管理员 2023-07-10 10:32:40 互联网圈 5 ℃ 0 评论 2723字 收藏

Oracle分页查询的实例详解

Oracle分页查询的实例详解

1.Oracle分页查询:

SELECT * FROM
( SELECT A.*, ROWNUM RN FROM
(SELECT * FROM tab) A
WHERE ROWNUM <= 40 )
WHERE RN >= 21;

这个分页比下面的履行时间少,效力高。 

2.

select * from
(select c.*,rownum rn from tab c) where rn between 21 and 40

 对照这两种写法,绝大多数的情况下,第一个查询的效力比第二个高很多。这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的履行效力。对第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就能够被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle没法将第三层的查询条件推到最内层(即便推到最内层也没成心义,由于最内层查询不知道RN代表甚么)。】因此,对第二个查询语句,
Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,
明显这个效力要比第一个查询低很多。

上面分析的查询不单单是针对单表的简单查询,对最内层查询是复杂的多表联合查询或最内层查询包括排序的情况一样有效。

3.下面简单讨论一下多表联合的情况。对最多见的等值表连接查询,CBO一般可能会采取两种连接方式

NESTED LOOP和HASH JOIN(MERGE JOIN效力比HASH JOIN效力低,一般CBO不会斟酌)。
在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时
可以马上停止并将结果返回给中间层,而HASH JOIN一定要处理完所有结果集(MERGE JOIN也是)。
那末在大部份的情况下,对Oracle分页查询选择NESTED LOOP作为查询的连接方法具有较高的效力
(分页查询的时候绝大部份的情况是查询前几页的数据,越靠后面的页数访问概率越小)。

SELECT /*+FIRST_ROWS*/ * FROM —hint 提示,优化查询
( SELECT A.*, ROWNUM RN FROM
(SELECT * FROM tab) A
WHERE ROWNUM <= 400 )
WHERE RN >= 380

如有疑问请留言或到本站社区交换讨论,感谢浏览,希望能帮助到大家,谢谢大家对本站的支持!

文章来源:丸子建站

文章标题:Oracle分页查询的实例详解

https://www.wanzijz.com/view/62707.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信