Oracle分页查询的示例分析

48次阅读
没有评论

共计 1222 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 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 分页查询的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1222字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)