本文讲述了Orcle优化器的概念.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本文讲述了Orcle优化器的概念

???? 本文讲述了Oracle优化器的概念、工作原理和使用方法,兼顾了Oracle8i、9i以及最新的10g三个版本。理解本文将有助于您更好的更有效的进行SQL优化工作。 RBO优化器 ???? ?RBO是一种基于规则的优化器,随着CBO优化器的逐步发展和完善,在最新的10g版本中Oracle已经彻底废除了RBO。正在使用Oracle8i或9i的人们或多或少的都会碰到RBO,因此在详细介绍CBO之前,我们有必要简单回顾一下古老的RBO优化器。 ???? ?在RBO中Oracle根据可用的访问路径和访问路径的等级来选择执行计划,等级越高的访问路径通常运行SQL越慢,如果一个语句有多个路径可走,Oracle总是选择等级较低的访问路径。 RBO访问路径 ?1级:用Rowid定位单行 ????? 当WHERE子句中直接嵌入Rowid时,RBO走此路径。Oracle不推荐直接引用Rowid,Rowid可能会由于版本的改变而变化,行迁移、行链接、EXP/IMP也会使Rowid发生变化。 ?2级:用Cluster Join定位单行 ????? 两个表做等值连接,一方的连接字段是Cluster Key,且WHERE中存在可以保证该语句仅返回一行记录的条件时,RBO走此路径。 ?3级:用带用唯一约束或做主键的Hash Cluster Key定位单行 ?4级:用唯一约束的字段或做主键的字段来定位单行 ?5级:Cluster Join ?6级:使用Hash Cluster Key ?7级:使用索引Cluster Key ?8级:使用复合索引 ?9级:使用单字段索引 ?10级:用索引进行有界限范围的查找 ???? 如,column >[=] expr AND column <[=] expr或column BETWEEN expr AND expr 或column LIKE ‘c%’ ?11级:用索引字段进行无界限的查找 ???? 如,WHERE column >[=] expr 或 WHERE column <[=] expr ?12级:排序合并连接 ?13级:对索引字段使用MAX或MIN函数 ?14级:ORDER BY索引字段 ?15级:全表扫描 ???? ?如果可以使用索引RBO会尽可能的去用索引而不是全表扫描,但是在下列一些情况RBO只能使用全表扫描: ??? ?如果column1和column2是同一个表的字段,含有条件column1 < column2或column1 > column2或column1 <= column2或column1 >= column2,RBO会用全表扫描。 ??? ?如果使用column IS NULL或column IS NOT NULL或column NOT IN或column != expr或column LIKE ‘%ABC’时,不论column有无索引,RBO都使用全表扫描。 ??? ?如果expr = expr2,expr表达式作用了一个字段上,无论该字段有无索引,RBO都会全表扫描。 ?NOT EXISTS子查询以及在视图中使用ROWNUM也会造成RBO进行全表扫描。 ?????以上就是RBO的全部可用访问路径。RBO优化器死板的根据规则来选择执行计划显然不够灵活,在RBO中也无法使用物化视图等Oracle提供的新特性,在Oracle8i时CBO已经基本成熟,因此Oracle强烈建议改用CBO优化器。下文将全面介绍CBO优化器。 CBO优化器结构 ????? CBO是基于成本的优化器,它根据可用的访问路径、对象的统计信息、嵌入的Hints来选择一个成本最低的执行计划。 ?CBO主要包含以下组件: l?查询转换器(Query Transformer) l?评估器(Estimator) l?计划生成器(Plan Generator) 查询转换器 ??????查询语句的形式会影响所产生的执行计划,查询转换器的作用就是改变查询语句的形式以产生较好的执行计划。 ???? 从Oracle 8i开始就有四种转换技术:视图合并(View Merging)、谓词推进(Predicate Pushing)、非嵌套子查询(Subquery Unnesting)和物化视图的查询重写(Query Rewrite with Materialized Views)。 ???? ?视图合并:如果SQL语句中含有视图,经分析后会把视图放在独立的“视图查询块”中,每个视图会产生一个视图子计划,当为整个语句产生执行计划时,视图子计划会被直接拿来使用而不会照顾到语句的整体性,这样就很容易导致不良执行计划的生成。视图合并就是为了去掉“视图查询块”,将视图合并到一个整体的查询块中,这样就不会有视图子计划产生,执行计划的优良性得到提升。 ?

文档评论(0)

aining + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档