123
返回列表 发新帖
楼主: hhwytfliq

[讨论] 最新使用动态SQL进行变量绑定 分析

[复制链接]
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
21#
发表于 2010-9-29 10:53 | 只看该作者
原帖由 sundog315 于 2010-9-29 09:59 发表
但是,如果在ID列有索引,不绑定SQL和普通变量绑定SQL,由于bind peeking的存在,都会选择正确的执行计划。sys_context由于将值进行了封装,无法进行bind peeking,将会导致选择错误的执行计划
  

你举的例子比较特殊,因为你的数据倾斜度太高了,这样的数据本身就不应使用变量绑定,不过sys_context确实存在这个问题,不能正确的利用索引,对执行计划有影响,看来不选用这个是对的

使用道具 举报

回复
论坛徽章:
86
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11优秀写手
日期:2013-12-18 09:29:11日产
日期:2013-10-17 08:44:39马自达
日期:2013-08-26 16:28:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:51马上有房
日期:2014-02-19 11:55:14
22#
发表于 2010-9-29 21:00 | 只看该作者
原帖由 hponiang 于 2010-9-29 10:49 发表
执行计划我也关注过程,二者完全是一样的,但我在plsql里执行的耗时很有差异
我发现如果列出列名二者的差异就会少好多


SELECT *  from dba_objects WHERE object_name = (SELECT object_name
           from dba_objects WHERE object_name =  'UNDO$');

   
          SELECT *
           from dba_objects WHERE object_name = 'UNDO$';


你就用这二句进行测试就可得知,如果你觉得这个视图太复杂,不便于分析你可以找一个你们使用中类似的表,要求 [object_name = 'UNDO$'](能唯一确定一条值且这列上没有索引)


耗时没有太大意义的,你可以看一下两次的consistent gets。

你这两个例子,完全是不同的事情

[ 本帖最后由 sundog315 于 2010-9-29 21:02 编辑 ]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表