3. 如何使用CBO,CBO与RULE的区别 ; i4 q4 f2 H6 h1 l m1 f0 e
IF 初始化参数 OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)
8 o; b3 D4 T! m) K& r IF 做过表分析
5 A# q9 {# g6 |* F' P2 ` THEN 优化器 Optimizer=CBO(COST); /*高效*/
' H1 s) h: X$ y' K9 u ELSE 7 U- w2 B2 Z1 {, o/ Y o
优化器 Optimizer=RBO(RULE); /*高效*/
" D6 x+ v5 m0 U4 [4 Q END IF;
0 K$ u) q: t1 @ END IF; / ?( s8 l+ K! B( P
- B& D8 b% o/ L% ~2 a0 R! ? 区别: 3 S; g* K; p: d! U: r1 H' h
RBO根据规则选择最佳执行路径来运行查询。
8 q4 z% I6 a- @7 E CBO根据表统计找到最低成本的访问数据的方法确定执行计划。
" N4 x3 `+ K5 R 使用CBO需要注意:
7 Y. n. U" j) Z' C V1 | I) 需要经常对表进行ANALYZE命令进行分析统计; 0 V' G5 ?/ l Y& h8 R- y
II) 需要稳定执行计划; & o# G8 m: `# r
III)需要使用提示(Hint);
. c% T, M3 M X3 Y 使用RULE需要注意: 1 h& r1 m, t8 k$ v5 ?* [7 B# q
I) 选择最有效率的表名顺序
: h- p, @! d6 k( q# X2 e; zII) 优化SQL的写法; & H9 _$ t& \- a' f; Q% ^2 P
在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。
0 l% N; g% ~; D8 sRBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。 " W$ X R, k" b# l
CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。 |