· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

Oracle 9i 数据库里指针共享的增强

发布时间:2007.01.24 04:41     来源:赛迪网技术社区    作者:yuanjin

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会切换到绑定变量,如果这样做不会导致结果产生任何变化的话,但是如果使用绑定变量会造成结果的巨大变化,它就会使用文字值。

(T004)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· SQL Server2005数据库查询中使用CTE (01-23) · 优化MySQL数据库查询的三种方法简介 (01-23)
· 关于数据库权限管理的对象模型分析 (01-22) · 怎样在Oracle数据库中高速导出/导入 (01-19)
· Oracle数据库中的段管理方式详细介绍 (01-19) · 数据库加密技术的原理及其相关问题 (01-18)
· 合理设置数据库以提高查询统计速度 (01-17) · 数据库查询优化器原理及其发展方向 (01-17)
· SQL Server数据库崩溃后的恢复之法 (01-16) · 精华推荐:Oracle 9i的全文检索技术 (01-16)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..