加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle分页查询性能优化

发布时间:2020-12-12 18:51:06 所属栏目:百科 来源:网络整理
导读:对于数据库中表的数据的Web显示,如果没有展示顺序的需要,而且因为满足条件的记录如此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情况下,他们只看前几页。 通常有以下两种分页技术可供选择。 1 2 3 4 5 6 7 Select
1 2 3 4 5 6 7 Select*from(rownum rn,t.*fromtablet) Wherern>&minnumandrn<=&maxnum或者 (t rownum<=&maxnum) rn>&minnum

看似相似的分页语句,在响应速度上其实有很大的差别。来看一个测试过程,首先创建一个测试表。

1 SQL>createtestasselectdba_objects;

并反复地插入相同数据。

insertintotest;

最后,查询该表,可以看到该表的记录数约为80万条。

4 selectcount(*)testCOUNT(*)----------831104

现在分别采用两种分页方式,在第一种分页方式中:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 (2test t)3wherern>0rn <=50; 已选择50行。已用时间: 00: 00: 01.03Execution Plan ----------------------------------------------------------0SELECTSTATEMENT Optimizer=CHOOSE (Cost=10 Card=65 Bytes=12350) 1 0VIEW(Cost=10 Card=65 Bytes=12350)2 1COUNT 3 2TABLEACCESS (FULL)OF'TEST'(Cost=10 Card=65 Bytes=5590) Statistics---------------------------------------------------------- 0 recursive calls0 db block gets 10246 consistent gets0 physical reads 0 redosize……

可以看到,这种方式查询第一页的一致性读有10246个,结果满足了,但是效率是很差的,如果采用第二种方式:

22 23 test t rownum <=50)4rn>0;已选择50行。 已用时间: 00: 00: 01.00 Execution Plan---------------------------------------------------------- STATEMENT Optimizer=CHOOSE (Cost=10 Card=50 Bytes=9500)(Cost=10 Card=50 Bytes=9500) (STOPKEY)(Cost=10 Card=65 Bytes=5590)Statistics ----------------------------------------------------------0 recursive calls 0 db block gets82 consistent gets 0 physical readssize 得到了同样的结果,一致性读只有82个,从以上的例子可以看到,通过把rownum引入到第二层,却得到了一个完全不一样的执行计划,注意在执行计划中的stopkey,它是8i引入的新操作,这种操作专门为提取Topn的需求做了优化。

从上面的例子可以再想到,因为stopkey的功能影响到了分页的一致性读的多少,会不会越往后翻页速度就越慢呢?事实也的确如此,例如:

16 rownum <=10000)rn>9950; 已用时间: 00: 00: 01.01Statistics0 recursive calls0 db block gets 2616 consistent gets0 physical reads size选择靠后一点的数据时,逻辑读开始变大,当选择到最后几页时,一致性读已经与上面的相似了。

rownum <=800000)
rn>799950; 已用时间: 00: 00: 01.0310242 consistent gets不过,所幸的是,大部分的用户只看开始5%的数据,而没有兴趣看最后面的数据,通过第二种改良的分页技术,可以方便快速地显示前面的数据,而且不会让用户感觉到慢。

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

对于数据库中表的数据的Web显示,如果没有展示顺序的需要,而且因为满足条件的记录如此之多,就不得不对数据进行分页处理。常常用户并不是对所有数据都感兴趣的,或者大部分情况下,他们只看前几页。

通常有以下两种分页技术可供选择。