WEB开发网
开发学院数据库Oracle 何时Oracle使用绑定变量性能反而更差 阅读

何时Oracle使用绑定变量性能反而更差

 2007-05-09 12:12:50 来源:WEB开发网   
核心提示: 因为计算的成本是平均成本(相对实际扫描某个值的成本,平均成本更接近全表扫描成本),何时Oracle使用绑定变量性能反而更差(5),因此在创建查询计划时,使用绑定变量将更加容易受到参数OPTIMIZER_INDEX_COST_ADJ影响,将绑定变量传入的值考虑进去,从而计算出更合理的成本(否

因为计算的成本是平均成本(相对实际扫描某个值的成本,平均成本更接近全表扫描成本),因此在创建查询计划时,使用绑定变量将更加容易受到参数OPTIMIZER_INDEX_COST_ADJ影响,特别是上面的这种情况(即索引字段的集的势非常高时)下,平均代价与实际扫描某个值代价相差非常远。这种情况下,OPTIMIZER_INDEX_COST_ADJ对不使用绑定变量查询影响就非常小(因为索引代价不是比全表扫描成本大很多就是小很多),不管扫描哪个值,不使用绑定变量将更加容易选择到合理的查询计划。

绑定变量窥视

在了解了参数OPTIMIZER_INDEX_COST_ADJ的作用后。再了解一个对查询计划,特别是使用绑定变量时会产生重大影响的特性:绑定变量窥视(Bind Variables Peeking)。

绑定变量窥视是9i以后的一个新特性。它使CBO优化器在计算访问代价时,将绑定变量传入的值考虑进去,从而计算出更合理的成本(否则,将会计算平均成本)。看下面例子:SQL> conn sys/sys as sysdba
Connected.
SQL>
SQL> alter system set OPTIMIZER_INDEX_COST_ADJ=60;
System altered.
SQL> analyze table T_PEEKING compute
statistics for table for all indexes for all indexed columns;
Table analyzed.
SQL>
SQL> set autot trace
SQL>
SQL> alter session set sql_trace = true;
Session altered.
SQL>
SQL> var v char(1)
SQL>
SQL> exec :v := 'A';
PL/SQL procedure successfully completed.
SQL>
SQL> select * from T_PEEKING a where b = :V;
1000 rows selected.
SQL>
SQL> alter session set sql_trace = false;
Session altered.

上一页  1 2 3 4 5 6 7  下一页

Tags:何时 Oracle 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接