收藏本站 
广告服务 
网站地图 
>> 本频道近100000余篇各类电脑技术、网络技术、软件技术、网页及平面设计等方面的电脑教程,我们的原则:不是精华拒不收录!
先飞电脑技术网技术文章数据库开发Oracle
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |

轻松掌握Oracle9i里指针共享的增强

[ 作者:佚名    转贴自:网络转载    阅读次数:108    更新时间:2007-9-17 11:11:00   录入:刘光勇 ]         
    在Oracle9i里,有一个内部新特性,它允许SQL基于代价的优化器(cost-based optimizer,CBO)改变执行计划,即使正在使用优化器计划的稳定性。叫做“窥视(peeking)”,当绑定变量导致SQL的执行计划发生重大改变的时候,它允许SQL的CBO更该执行计划。  

但是,指针共享在优化的时候有一个处理延迟,只有当应用程序生成动态SQL的时候,或者它在必须嵌入文字值的应用程序里的时候,它才应该被使用。由于绑定变量的缘故,PL/SQL应用程序不会从指针共享里获益。  

为了说明这一问题,你可以考虑以下这样一个例子:我们的CURSOR_SHARING参数被设置为FORCE。这会把所有的SQL文字值都改为库缓冲区里的主变量(host variable)。  

现在,让我们假设我们有了一个对客户(customer)表格的区域(region)列的索引。区域列有四个值:东(east)、南(south)、西(west)、北(north)。区域列的数据值高度不对称,90%的值都在南部地区。  

所以在指定南部的时候,让SQL的CBO来执行完整的表格扫描,而在指定东、西、北的时候,使用索引范围扫描,这样速度会更快。在使用指针共享的时候,SQL的CBO会把SQL里的任何文字值都改为绑定变量。所以这个陈述式可以改成下面这样:

  select
    customer_stuff
  from
    customer
  where
    region = 'west'; 
  
  这个转换会把文字west替换成主变量:
  
  select
    customer_stuff
  from
    customer
  where
    region = ':var1';

在Oracle9i里,SQL的CBO会在第一次调用指针的时候,“窥视”由用户定义的绑定变量的值。这就能够让优化器确定WHERE子句操作符的选择性,并在south值每次出现在SQL的时候更改执行计划。

当绑定变量用于高度不对称的数据列时,这就极大地提高了指针共享的性能。在Oracle9i里,我们看到了一个用于CURSOR_SHARING的新设置,叫做SIMILAR。

有了CURSOR_SHARING=SIMILAR,Oracle会切换到绑定变量,如果这样做不会导致结果产生任何变化的话,但是如果使用绑定变量会造成结果的巨大变化,它就会使用文字值。

文章首页【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“轻松掌握Oracle9i里指针共享的增强”版权归文章所有者,转载请注明出处!
 ·上一篇文章:用UNIX的kill命令终止Oracle的过程      ·下一篇文章:深入理解系统全局区(SGA)的概念
相关文章
·轻松更改Excel 2007中的字体或字号[41]
·轻松应对创建存储过程时出现失败的情况[85]
·轻松掌握SQL Server的数据同步技术[78]
·轻松掌握Informix数据备份的小技巧[106]
·轻松掌握数据库复制到Windows CE设备.[54]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号 先飞电脑教程网