Oracle学习系列—数据库优化—CBO介绍

CBO(Cost-based optimizer)是根据系统统计信息并以系统吞吐为最佳优化目标的Oracle优化方式。

边学边翻译,边翻译边体会..


通常情况下,CBO是缺省的

  1. 假如数据字典中包括至少一个待访问表的统计信息,那么优化器将选择基于成本的优化方式,以获取最大吞吐量的目标。
  2. 假如数据字典仅包含部分统计信息,仍将使用CBO方式,但是优化器不得不猜测那些没有任何统计信息的表的统计。这可能会导致次优化的执行计划。
  3. 假如数据字典没有包含任何待访问表的统计信息,优化器将选择RBO方式

以下是要必须使用CBO进行优化的内容

  1. 分区表和分区索引
  2. 索引组织表
  3. 翻转键索引
  4. Select 语句中的SAMPLE语法
  5. 并行查询和并行DML
  6. 星星转换和星星连接
  7. Etensible优化
  8. 物化视图的查询重写
  9. Enterprise Manager Progress Meter
  10. Hash连接
  11. 位图索引和位图join索引
  12. 跳索引扫描(Index Skip Scans)

CBO的组成

  1. 查询转换(Query Transformer)
  2. 评估(Estimator)
  3. 计划生成器(Plan Generator)

CBO


查询转换(Query Transformer)

查询转换器主要分析下面4种查询转换信息

Ø 视图合并(View Merging).

Ø 断言(Predicate Pushing)

Ø 非嵌套子查询(Subquery Unnesting)

Ø 物化视图的查询重写(Query Rewrite with Materialized Views)

评估(Estimator)

评估器产生下面三种类型的度量值

Ø 选择性(Selectivity)

选择性代表了一个记录集(基表,视图,Group By结果集)中的片断,选择性通常和一个查询断言进行绑定.一个断言的选择性表明了一个结果集的行数通过了断言测试.选择性的范围是从0.01.0,0.0的选择性表示在结果中没有记录被选择,1.0的选择性表示所有行被选中

Ø 基数(Cardinality)

基数表示一个行集中的行数.

基本基数 是一个基表的记录数,通过分析表(Analyze Table)能够被获取,评估器通过表的分区数(Extents)来估计基本基数

有效基数 是从基表中选择到的记录数,有效基数取决于断言的查询.

连接基数 是两个行集连接后产生的行集.

Distinct基数 是行集中某个字段的Distinct的行数.

Group基数 是分组后产生的行数

Ø 成本(Cost)

成本代表资源使用的单位,CBO使用I/O,CPU,内存做为工作单位.

计划生成器(Plan Generator)

主要功能是试图找出所有可能的不同的组合,并找到最低成本的执行计划

一个SQL执行计划和执行步骤

详细参看Oracle9i/Database Performance Tuning Guide and Reference

EXPLAIN PLAN FOR

SELECT e.employee_id, j.job_title, e.salary, d.department_name

FROM employees e, jobs j, departments d

WHERE e.employee_id < 103

AND e.job_id = j.job_id

AND e.department_id = d.department_id;

CBO

CBO


  1. 全表访问Employees行数据(Employee _ID<103太没有效率,故不走索引)
  2. 根据Employees行记录,通过唯一索引JOB_ID_PK扫描访问JOB表的JOB_ID字段
  3. 根据JOB_ID获取JOBS表的ROWID
  4. Employees表的结果集和Jobs表进行嵌套循环访问(13进行嵌套访问)
  5. 根据Employees行记录,通过唯一索引扫描访问Departments表的Department_ID字段
  6. 根据Department_ID获取ROWID
  7. 64的结果集进行嵌套循环访问
  8. 返回记录集

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6517/viewspace-145520/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6517/viewspace-145520/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值