




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何对Oracle中的优化器进行评估优化 电脑资料 Oracle优化器在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是: 要么结果表达式能够比源表达式具有更快的速度, 要么源表达式只是结果表达式的一个等价语义结构。 不同的SQL结构有时具有同样的操作(例如:= ANY (subquery) and IN (subquery)),Oracle会把他们映射到一个单一的语义结构。 下面将讨论优化器如何评估优化如下的情况和表达式: 常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BETWEEN 操作符 NOT 操作符 传递(Transitivity) 确定性(DETERMINISTIC)函数 常量 常量的计算是在语句被优化时一次性完成,而不是在每次执行时。下面是检索月薪大于2000的的表达式: sal 24000/12 sal 2000 sal*12 24000 如果SQL语句包括第一种情况,优化器会简单地把它转变成第二种。 注意:优化器不会简化跨越比较符的表达式,例如第三条语句,鉴于此,应用程序开发者应该尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中。 LIKE 操作符 优化器把使用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作符表达式。 例如:优化器会把表达式ename LIKE SMITH转换为ename = SMITH优化器只能转换涉及到可变长数据类型的表达式,前一个例子中,如果ENAME字段的类型是CHAR(10), 那么优化器将不做任何转换。 IN 操作符 优化器把使用IN比较符的检索表达式替换为等价的使用“=”和“OR”操作符的检索表达式。例如,优化器会把表达式ename IN (SMITH,KING,JONES)替换为: ename = SMITH OR ename = KING OR ename = JONES ANY和SOME 操作符 优化器将跟随(following)值列表的ANY和SOME检索条件用等价的同等操作符和“OR”组成的表达式替换。 例如,优化器将如下所示的第一条语句用第二条语句替换: sal ANY (:first_sal, :second_sal) sal :first_sal OR sal :second_sal 优化器将跟随子查询的ANY和SOME检索条件转换成由“EXISTS”和一个相应的子查询组成的检索表达式。 例如,优化器将如下所示的第一条语句用第二条语句替换: x ANY (SELECT sal FROM emp WHERE job = ANALYST) EXISTS (SELECT sal FROM emp WHERE job = ANALYST AND x sal) ALL 操作符 优化器将跟随值列表的ALL操作符用等价的“=”和“AND”组成的表达式替换。 例如,sal ALL (:first_sal, :second_sal)表达式会被替换为: sal :first_sal AND sal :second_sal 对于跟随子查询的ALL表达式,优化器用ANY和另外一个合适的比较符组成的表达式替换。例如,优化器会把表达式 x ALL (SELECT sal FROM emp WHERE deptno = 10) 替换为: NOT (x = ANY (SELECT sal FROM emp WHERE deptno = 10) 接下来优化器会把第二个表达式适用ANY表达式的转换规则转换为下面的表达式: NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x =”和“=”比较符来等价的代替BETWEEN操作符, NOT 操作符 优化器总是试图简化检索条件以消除“NOT”逻辑操作符 _,这将涉及到“NOT”操作符的消除以及代以相应的比较运算符。 例如,优化器将下面的第一条语句用第二条语句代替: NOT deptno = (SELECT deptno FROM emp WHERE ename = TAYLOR) deptno (SELECT deptno FROM emp WHERE ename = TAYLOR) 通常情况下一个含有NOT操作符的语句有很多不同的写法,优化器的转换原则是使“NOT”操作符后边的子句尽可能的简单,即使可能会使结果表达式包含了更多的“NOT”操作符。例如,优化器将如下所示的第一条语句用第二条语句代替: NOT (sal 1000 OR m IS NULL) NOT sal = 1000 AND m IS NOT NULL 传递(Transitivity) 如果“WHERE”子句的两个检索条件涉及了一个共同的字段,优化器有时会根据传递原理推断出第三个检索条件,随后可以根据这个推断出的条件对语句 进行优化,推断出的条件可能会激活一个原来的检索条件没有激活的潜在的接口路径(aess path)。注意:传递仅仅被用在基于代价(cost-based)的优化中。 假设有一个这样的包含两个检索条件的“WHERE”子句:WHERE 字段1 常量 AND字段1 = 字段2,在这个例子里,优化器会推断出新的检索条件:字段2 常量。在这里,是比较运算符=、!=、=、=之中的任何一个,常量是指任何一个涉及了操作符、SQL函数、文字、绑定变量(bind variables)或者关联变量(correlation variables)的常量表达式。 例如,考虑这样一个包含两个各自使用了字段EMP.DEPTNO的检索条件的WHERE子句的查询: SELECT * FROM emp, dept WHERE emp.deptno = 20 AND emp.deptno = dept.deptno; 使用传递优化,优化器会推断出如下条件:dept.deptno = 20。如果有索引存在于EMP.DEPTNO字段上,这个条件会使调用这个索引的接口路径有效。注意:优化器只能对字段关联常量的表达式进行推断,而不是 字段关联字段的表达式。例如,包含这样条件的WHERE子句:字段1 字段3 AND 字段1 = 字段2,这种情况不能推断出表达式:字段2 字段3。 确定性(DETERMINISTIC)函数 在某些情况下,优化器能够使用先前的函数返回结果而不是重新执行用户定义的函数,这仅仅对那些以限制的方式来执行的函数来说是有效的。这些函数必须 对任何的输入都有同样的返回值,函数的结果必须不能因为包(PACKAGE)变量、数据库或会话(SESSION)的参数(例如NLS参数)不同而变化, 如果函数在将来重新定义,返回值必须对任何参数来说仍然与以前的返回值相同。函数的创建者可以在以CREATE FUNCTION、CREATE PACKAGE或者CREATE TYPE声明函数时根据以上的要求使用DETERMINISTIC关键字向数据库申明该函数为确定性函数,数据库不会对确定性函数的合法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电影业务知识培训课件
- 成人胸腔引流管的置置与维护技巧
- 羊毛衣洗涤知识培训课件
- 小学科学一年级下册学科教学计划
- 统编部编五年级语文下册作文写作环境营造计划
- 金融科技新产品研发流程
- 2025年度快消品行业培训计划
- 绿色建筑推广2025年总结及2025年工作计划
- 2025届环境保护英语写作范文
- 山东省青岛市即墨区2023-2024学年高一下学期期末地理试题(解析版)
- 一例脑梗死合并上消化道出血患者的护理措施分析
- 精神障碍的早期识别与心理治疗
- 家庭经济困难学生认定申请表
- 2024年《经济法基础》教案(附件版)
- 2024年无人机相关项目招商引资方案
- 中职教育人工智能技术赋能
- 《机电一体化系统设计》第四章课件
- 新污染物科普知识讲座
- 运动性失语的护理课件
- SICD植入护理配合
- 北京外国语大学611英语基础测试(技能)历年考研真题及详解
评论
0/150
提交评论