oracle使用的优化器,Oracle中SQL优化器的两种优化方式及使用

2008 年第 1 期 福 建 电 脑 (下转第 173 页) Oracle 中 SQL优化器的两种优化方式及使用 张 昉 ( 辽宁省交通高等专科学校 辽宁 沈阳 110122 ) 【摘 要】: 本文对 Oracle 中 SQL 优化器的优化方式进行阐述, 并根据同一实例说明 RBO、CBO 在优化方式、执行效率、 执行时间上的不同。 【关键词】: Oracle 优化器 RBO CBO 一、分析 SQL 语句的执行过程 一段 SQL 语句的执行过程可分为三步, 即语法分析(Parse) 与编译、执行、取回数据。在语法分析与编译的过程中, Oracle 使用哈希(Hash) 函数为 SQL 语句在库缓存(Library Cache) 中分配一个 SQL 区, 然后在该区域内查找该段 SQL 语句是否存在, 如果存在, 则查询数据字典、检查必须的存取权限, 直接调用其分析、编译的结果; 如果 SQL 区没有该语句, 则进行分析、编译; 然后将所需数据从数据文件中读入到数据缓冲区, 如图 1-1 所示。 图 1-1 SQL 语句的执行顺序 从上面的分析可知, SQL 语句如果存在于内存, 分析和编译的时间则会减少。所以 SQL 优化的目标是减少分析与编译的时间, 尽量实现代码的共享。 可以通过 vSsysstat、vSsystem_event 数据字典视图, 查询到count 和总的等待时间。而解析一段 SQL 语句平均所花费的时间可以通过公式: 平均解析时间 = 总的等待时间 / count 获得, 这个求得的值应该接近于 0。查询 count 语句如下: SQL> select * from vSsysstat 2 where name in ('parse time cpu', 3 'parse time elapsed', 4 'parse count (hard)'); 总的等待时间可通过如下代码查询: SQ>select total_waits,total_timeouts,time_waited,average_wait, event 2 from vSsystem_event 3 where event='latch free'; 二、SQL 优化器 SQL 语句的优化方式(OPTIMIZER_MODE) 有两种, 即基于成本的优化器 CBO (Cost-Based)、基于规则的优化器 RBO (Rule-Based)。在数据库运行时, 可以查询优化器的方式: SQL> showparameter OPTIMIZER_MODE 下面从两种优化方式来看 Oracle 对 SQL 的优化。 1. 基 于 规 则 的 程 序 优化器(Rule-Based Optimizer, RBO) 在基于规则的优化程序 (Rule -Based Optimizer, RBO) 中, 这些路径会映射到一个 15 个规则的集合中。如果存在索引, 将与基于规则的优化程序一起使用, 即使要返回所有的表数据, 优化程序也会假定索引的速度快 于表扫描。下表, 列出了基于 规则的路径等级, 等级越低的执行效率越高, 耗费的时间越短, 否则, 反之。 对于一段 SQL 语句, RBO 首先从下往上察看 WHERE 子句, 按照表 2-1 中的 15 个等级, 为每个子句打分。得分最高、执行效率最低的 FULL TABLE-SCAN( 全表扫描) 排在最末一位。RBO 就遵照这些标准对一段 SQL 语句打分, 得分最少为最优方案。 下面举个例子论证一下 RBO 的工作方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值