日期:2014-05-17  浏览次数:20998 次

rbo方式下,性能影响大吗
a 表 20几个字段
b 表 30几个字段

两个表中有几个字段存放的数据是一样的。

两种情况都是两个表连接的情况下,

1 select语句 取的是a表的 3个字段。
select a.Col1, a.Col2, a.Col3
from a,b
where a.key = b.key

2 select语句 取的是a表的 2个字段,b表一个字段。
select a.Col1, a.Col2, b.Col3
from a,b
where a.key = b.key
那种性能好,
数据量大的情况下,速度有多明显差距吗。 

oracle9i 是在rbo方式下


------解决方案--------------------
实际上测试一下最准.
你用sqlplus登陆进去,
然后执行
set timing on
set autotrace traceonly
再分别执行上面2个语句,比较输出的结果。
------解决方案--------------------
我的理解 
rbo 是基于规则, cbo 是基于代价
前者有些象是 用户强制数据库 使用某种类型的执行计划,
后者是 oracle 优化器根据 收集到的数据库信息, 比如 analyze table *** on compute ,或者使用dbms_stats 得到的数据库 对象的统计信息, 比较执行计划之后 优化器提出使用哪一种模式


如果 统计信息足够新,那么cbo 一般来说还是要比rbo 科学一些

不过要是 dba 足够了解数据库的数据分布的特点, 比如 能用集簇因子和柱状图 来收集 数据信息,也有可能找到比cbo 模式下更好的执行计划,而用rbo的方式来实现