设为首页 加入收藏

TOP

MOS文章实验:ORA-01722 from Queries with Dependent Predicates(三)
2015-11-21 01:53:15 来源: 作者: 【 】 浏览:5
Tags:MOS 文章 实验 ORA-01722 from Queries with Dependent Predicates
的查询转换规则,会先对子查询内联视图做解析,或者子查询展开后条件为where to_number(data) = 22 and data_type='zip';,如实验语句2,但仅仅是猜测。3. 9i下,如果表有统计信息,或者alter session设置session级优化器模式为CBO,如MOS中提到的“The CBO's function is to generate execution plans that satisfy the query in the most optimal way it can.”,实验语句3指出CBO下,对谓词顺序进行了调整,先使用data_type='zip'过滤,然后再执行to_number()。4. 9i下的CBO,如实验语句4,MOS中提到“That means views often get merged into the main query and so the order in which predicates are eva luated is not under your control”,从现象看先解析to_number(),导致报错。猜测做了子查询展开,谓词条件是where data_type='zip' and to_number(data) = 22,但从10053中,没有看到原因。5. 11g,优化器默认模式是CBO,会对谓词顺序进行调整,和9i下CBO的效果相同,如实验语句5。6. 同样,没有收集表统计信息的前提下,实验语句6可正常执行。7. @dbsnake提过Oracle 10g及其以后的版本中,Oracle会对某些类型的查询转换计算成本,只有当等价改写SQL的成本值小于未经过查询转换的原始SQL的成本值时,Oracle才会对目标SQL执行这些查询转换。收集表统计信息后,实验语句5依旧可以正常执行,会按照先解析data_type='zip',后解析to_number()的方式进行,不会报错。但实验语句6再次执行后出现错误,发现谓词条件变为先解析to_number(),所以报错,猜测收集统计信息后,实验语句6的执行成本发生了变化,导致前后使用了不同的执行路径,收集统计信息后,实验语句6成本值低的执行路径,因为谓词先解析了to_number(),导致报错。但从10053上未看出端倪。
虽然上述还有一些猜疑,暂时无从考证,但至少从这篇文章中学习了以下内容:1. 不同版本RBO和CBO的使用,以及对执行SQL的影响。2. explain plan for观察查询语句谓词顺序的变化。3. 10053查看执行计划的成本选择。
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HBase介绍 下一篇RAC下grid校验安装包引出的yum低..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: