欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏数据库 → 正文
10g CBO的一个问题
07-10-13 11:17:42 作者:半块点心 出处:本站原创
declare
     type rc is ref cursor;
     l_rc rc;
     l_dummy all_objects.object_name%type;
     l_start number default dbms_utility.get_time;
     y all_objects.object_name%type;
 begin
     for i in 1 .. 1000
     loop
         open l_rc for
         'select object_name
            from all_objects
           where object_id = :x and object_name=:y' using i,y;
         fetch l_rc into l_dummy;
         close l_rc;
     end loop;
     dbms_output.put_line
     ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
       ' seconds...' );
 end;

转Eygle的话:我想具体原因应该在优化器上,10g缺省采用的是CBO优化器.
9i如果没有统计信息那么缺省的是RBO.

对于这类大批量循环测试,CBO的影响会非常明显.
请参考我在10g下的测试结果:


代码:--------------------------------------------------------------------------------

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProdPL/SQL Release 10.2.0.1.0 - ProductionCORE    10.2.0.1.0      ProductionTNS for Linux: Version 10.2.0.1.0 - ProductionNLSRTL Version 10.2.0.1.0 - Production
SQL> set serveroutput on
SQL> declare  
2       type rc is ref cursor;  
3       l_rc rc;  
4       l_dummy all_objects.object_name%type;  
5       l_start number default dbms_utility.get_time;  
6   begin  
7       for i in 1 .. 1000  
8       loop  
9           open l_rc for 
10           'select object_name 
11              from all_objects 
12             where object_id = ' || i; 
13           fetch l_rc into l_dummy; 
14           close l_rc; 
15       end loop; 
16       dbms_output.put_line 
17       ( round( (dbms_utility.get_time-l_start)/100, 2 ) || 
18         ' seconds...' ); 
19   end; 
20  /
26.99 seconds...PL/SQL procedure successfully completed.
SQL> 
SQL> declare  
2       type rc is ref cursor;  
3       l_rc rc;  
4       l_dummy all_objects.object_name%type;  
5       l_start number default dbms_utility.get_time;  
6   begin  
7       for i in 1 .. 1000  
8       loop  
9           open l_rc for 
10           'select /*+ rule */ object_name 
11              from all_objects 
12             where object_id = ' || i; 
13           fetch l_rc into l_dummy; 
14           close l_rc; 
15       end loop; 
16       dbms_output.put_line 
17       ( round( (dbms_utility.get_time-l_start)/100, 2 ) || 
18         ' seconds...' ); 
19   end; 
20  /
16.37 seconds...PL/SQL procedure successfully completed.
SQL>
(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号