全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Oracle分页查询性能优化代码详解

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

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

Select * from (
Select rownum rn,t.* from table t)
Where rn>&minnum and rn<=&maxnum
或者
Select * from (
Select rownum rn,t.* from table t rownum<=&maxnum)
Where rn>&minnum

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

SQL>create table test as select * from dba_objects;

并反复地插入相同数据。

SQL>insert into test select * from test;

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

SQL> select count(*) from test
 COUNT(*)
----------
  831104

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

SQL> select * from (
 2 select rownum rn,t.* from test t)
 3 where rn>0 and rn <=50;
  
已选择50行。
已用时间: 00: 00: 01.03
  
Execution Plan
----------------------------------------------------------
  0   SELECT STATEMENT Optimizer=CHOOSE (Cost=10 Card=65 Bytes=12350)
  1  0  VIEW (Cost=10 Card=65 Bytes=12350)
  2  1   COUNT
  3  2    TABLE ACCESS (FULL) OF 'TEST' (Cost=10 Card=65 Bytes=5590)
  
Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
   10246 consistent gets
     0 physical reads
     0 redo size
     ……

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

SQL> select * from (
 2 select rownum rn,t.* from test t
 3 where rownum <=50)
 4 where rn>0;
 
已选择50行。
已用时间: 00: 00: 01.00
 
Execution Plan
----------------------------------------------------------
  0   SELECT STATEMENT Optimizer=CHOOSE (Cost=10 Card=50 Bytes=9500)
  1  0  VIEW (Cost=10 Card=50 Bytes=9500)
  2  1   COUNT (STOPKEY)
  3  2    TABLE ACCESS (FULL) OF 'TEST' (Cost=10 Card=65 Bytes=5590)
 
Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
     82 consistent gets
     0 physical reads
     0 redo size
     ……

得到了同样的结果,一致性读只有 82 个,从以上的例子可以看到,通过把 rownum 引入到第二层,却得到了一个完全不一样的执行计划,注意在执行计划中的 stopkey,它是 8i 引入的新操 作,这种操作专门为提取 Top n 的需求做了优化。

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

SQL> select * from (
 2 select rownum rn,t.* from test t
 3 where rownum <=10000)
 4 where rn>9950;
 
已选择50行。
已用时间: 00: 00: 01.01
 
Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
    2616 consistent gets
     0 physical reads
     0 redo size
     ……

选择靠后一点的数据时,逻辑读开始变大,当选择到最后几页时,一致性读已经与上面的相似了。

SQL> select * from (
 2 select rownum rn,t.* from test t
 3 where rownum <=800000)
 4 where rn>799950;
 
已选择50行。
已用时间: 00: 00: 01.03
 
Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
   10242 consistent gets
     0 physical reads
     0 redo size
     ……

不过,所幸的是,大部分的用户只看开始 5%的数据,而没有兴趣看最后面的数据,通过第二种改良的分页技术,可以方便快速地显示前面的数据,而且不会让用户感觉到慢。

总结

以上就是本文关于Oracle分页查询性能优化代码详解的全部内容,希望对大家有所帮助。欢迎大家参阅本站其他有关专题,有什么问题可以随时留言,小编会及时回复大家的。


# oracle  # 分页查询  # 性能优化  # Oracle实现分页查询的SQL语法汇总  # Oracle分页查询的实例详解  # 详解oracle分页查询的基础原理  # 简单实例解释Oracle分页查询  # Oracle中3种常用的分页查询方法  # 分页  # 可以看到  # 已用  # 两种  # 只看  # 第二种  # 的是  # 得到了  # 有什么  # 就不  # 感觉到  # 会不会  # 它是  # 感兴趣  # 的确如此  # 如果没有  # 会让  # 欢迎大家  # 约为  # 之多 


相关文章: 西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Python路径拼接规范_跨平台处理说明【指导】  网站制作壁纸教程视频,电脑壁纸网站?  定制建站是什么?如何实现个性化需求?  建站之星上传入口如何快速找到?  简单实现Android文件上传  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何在云主机上快速搭建多站点网站?  已有域名和空间,如何快速搭建网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  家庭服务器如何搭建个人网站?  建站之星伪静态规则如何正确配置?  存储型VPS适合搭建中小型网站吗?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何构建满足综合性能需求的优质建站方案?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  招贴海报怎么做,什么是海报招贴?  学校为何禁止电信移动建设网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在阿里云服务器自主搭建网站?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何用花生壳三步快速搭建专属网站?  广州美橙建站如何快速搭建多端合一网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何续费美橙建站之星域名及服务?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  C++中引用和指针有什么区别?(代码说明)  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站制作网站,深圳做网站哪家比较好?  如何通过二级域名建站提升品牌影响力?  建站之星3.0如何解决常见操作问题?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  javascript中的try catch异常捕获机制用法分析  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  建站之星如何助力企业快速打造五合一网站?  网站制作公司,橙子建站是合法的吗?  深圳网站制作培训,深圳哪些招聘网站比较好?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何通过免费商城建站系统源码自定义网站主题与功能?  建站主机选哪种环境更利于SEO优化?  Swift中循环语句中的转移语句 break 和 continue  成都网站制作公司哪家好,四川省职工服务网是做什么用?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。