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

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

 2007-05-09 12:12:50 来源:WEB开发网   
核心提示: 可以看出,在使用绑定变量时,何时Oracle使用绑定变量性能反而更差(4),参数OPTIMIZER_INDEX_COST_ADJ对于是否选择索引会有重要的影响,这里我们暂且不讨论索引扫描的原始成本是如何计算得出的,因此索引的平均成本是(336 * 1003/1000) / 3 &asymp

可以看出,在使用绑定变量时,参数OPTIMIZER_INDEX_COST_ADJ对于是否选择索引会有重要的影响。

这里我们暂且不讨论索引扫描的原始成本是如何计算得出的。但是有一点很重要,在使用绑定变量时,计算出的成本是平均成本。在我们上面的例子中,字段B的值只有3个:"A"、"B"、"C",其中A最多,1003行中有1000行。因此,在索引上扫描值为A记录的成本为1000/1003 * 索引全扫描成本 ≈索引全扫描成本,我们看下它的成本是多少:

SQL> alter system set OPTIMIZER_INDEX_COST_ADJ=100;
System altered.
SQL>
SQL> delete from plan_table;
2 rows deleted.
SQL>
SQL> explain plan for select
/*+index(a T_PEEKING_IDX1)*/* from T_PEEKING a where b = 'A';
Explained.
SQL>
SQL> select lpad(' ', 2*(level-1))||operation||' '||options||' '||
 2     object_name||' '||decode(id, 0, 'Cost='||position) "Query
 3 Plan_Table"
 4   from plan_table
 5   start with id = 0
 6   connect by prior id = parent_id;
Query
Plan_Table
--------------------------------------------------------------
SELECT STATEMENT  Cost=336
 TABLE ACCESS BY INDEX ROWID T_PEEKING
  INDEX RANGE SCAN T_PEEKING_IDX1

可以看到,它的成本是336。因此索引的平均成本是(336 * 1003/1000) / 3 ≈ 113,也就是使用绑定变量使的成本。而扫描其它两个值"B"和"A"时代价就非常小。SQL> alter system set OPTIMIZER_INDEX_COST_ADJ=100;
System altered.
SQL>
SQL> delete from plan_table;
3 rows deleted.
SQL>
SQL> explain plan for select
/*+index(a T_PEEKING_IDX1)*/* from T_PEEKING a where b = 'B';
Explained.
SQL>
SQL> select lpad(' ', 2*(level-1))||operation||' '||options||' '||
 2     object_name||' '||decode(id, 0, 'Cost='||position) "Query
 3 Plan_Table"
 4   from plan_table
 5   start with id = 0
 6   connect by prior id = parent_id;
Query
Plan_Table
---------------------------------------------------------------
SELECT STATEMENT  Cost=2
 TABLE ACCESS BY INDEX ROWID T_PEEKING
  INDEX RANGE SCAN T_PEEKING_IDX1

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

Tags:何时 Oracle 使用

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