ORACLE 提供了基于成本(CostBased)和基于规则(RuleBased)两种优化器,简称为CBO和RBO,用于确定查询操作的执行计划。


一、如何使用CostBased优化器优化查询操作?
如何使用CBO,那么首先要理解这些概念 
   1、CBO的成本计算的依据
   (1)统计信息:与SQL语句所引用的对象相关以及主机的CPU和IO
     (2)SQL语句本身

   (3).环境:例如与优化器相关的参数设置


   2、优化器目标:optimizer_mode
     (1)ALL_ROWS

     (2)FIRST_ROWS_N


   3、选择率和基数


   4、聚簇因子


   5、查询转换
    (1)视图合并(view merge)
    (2)谓词推进(Predicate Pushing)
    (3)子查询非嵌套化(Subquery Unnesting)

    (4)OR条件展开


   6、绑定变量与直方图


   7、收集统计信息


二、为什么CostBased优化器的执行计划不是最好的? 

  CostBased优化器本身也是个智能软件,肯定有陷缺,RBO(Rule-Based Optimizer)可以在某种程度上弥补CBO在性能上的缺陷。


三、为什么CostBased的查询有时候性能很好,有时候却突然的变慢呢?
  1、有可能是以下原因

   (1)统计信息不正确,这是关键所在


   (2)与优化器相关的参数设置的不太合理,如下参数
       optimizer_features_enable 
       optimizer_index_caching
       optimizer_index_cost_adj
       optimizer_mode
       db_{keep_|recycle_|nk_}cache_size
       db_block_size
       db_file_multiblock_read_count
       hash_area_size
       memory_target
       parallel_threads_per_cpu
       pga_aggregate_target
       sort_area_size

       sga_target


   (3)sql语句的编写

     例如一个复杂的sql有几十张表相连,CBO就不一定能正确连接表的顺序了,这时需要用Hint固定顺序。。。


  2、用以下方法改变执行计划

    (1)修改sql本身,如用Hints提示等


    (2)稳固计划


    (3)使用sql概要(sqlprofile)


    (4)改变统计信息


    (5)设置优化器模式相关的参数


    (6)使用基线(baseline)




**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name:    guoyJoe

QQ:        252803295

Email:    oracledba_cn@hotmail.com

Blog:      http://blog.csdn.net/guoyJoe

ITPUB:   http://www.itpub.net/space-uid-28460966.html

OCM:     http://education.oracle.com/education/otn/YGuo.HTM
 _____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!

答案在:http://blog.csdn.net/guoyjoe/article/details/8624392

Oracle@Paradise  总群:127149411

Oracle@Paradise No.1群:177089463(已满)

Oracle@Paradise No.2群:121341761

Oracle@Paradise No.3群:140856036