了解Oracle执行计划中每个步骤的成本

T. *_*cin -1 oracle

执行计划 使用以下执行计划(oracle数据库),有人可以解释我如何计算每个步骤相对于另一个步骤的成本?我不需要成本意味着什么,步骤之间的成本关系是什么.

我正在学习有关oracle数据库的课程,老师告诉我们,为了计算请求的成本,我们需要增加除第一行之外的每一行的成本(对于这个计划,他告诉我们总成本是348).

但是,如果将其计算为树,其中每个父节点的成本是其子节点的成本和父节点的成本(如果需要),则更有意义.

Mar*_*ber 5

您可以快速验证您的导师是错的.

对某些陈述执行解释计划,并在顶行检查成本(line = 0相等7)

EXPLAIN PLAN  SET STATEMENT_ID = 'jara1' into   plan_table  FOR
select * 
from ACCOUNTS a 
left outer join ACCOUNTS b 
on a.ACC = b.ACC;

---    
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', 'jara1','ALL'));

Plan hash value: 1881186757

-------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     4 |    24 |     7  (15)| 00:00:01 |
|*  1 |  HASH JOIN OUTER   |          |     4 |    24 |     7  (15)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| ACCOUNTS |     4 |    12 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| ACCOUNTS |     4 |    12 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$9E43CB6E
   2 - SEL$9E43CB6E / A@SEL$2
   3 - SEL$9E43CB6E / B@SEL$1

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A"."ACC"="B"."ACC"(+))

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - (#keys=1) "A"."ACC"[CHARACTER,1], "B"."ACC"[CHARACTER,1]
   2 - "A"."ACC"[CHARACTER,1]
   3 - "B"."ACC"[CHARACTER,1]

Note
-----
   - dynamic sampling used for this statement (level=2)
Run Code Online (Sandbox Code Playgroud)

现在运行的发言,并得到了OPTIMIZER_COST来自 V$SQL

select 
  OPTIMIZER_COST,
  sql_text
from v$sql 
where sql_text like 'select%ACCOUNTS%';

OPTIMIZER_COST SQL_TEXT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
-------------- ---------
            7 select *  from ACCOUNTS a  left outer join ACCOUNTS b  on a.ACC = b.ACC 
Run Code Online (Sandbox Code Playgroud)

因此,您可以计算成本累计,而最上面的行包含总成本