使用以下执行计划(oracle数据库),有人可以解释我如何计算每个步骤相对于另一个步骤的成本?我不需要成本意味着什么,步骤之间的成本关系是什么.
我正在学习有关oracle数据库的课程,老师告诉我们,为了计算请求的成本,我们需要增加除第一行之外的每一行的成本(对于这个计划,他告诉我们总成本是348).
但是,如果将其计算为树,其中每个父节点的成本是其子节点的成本和父节点的成本(如果需要),则更有意义.
您可以快速验证您的导师是错的.
对某些陈述执行解释计划,并在顶行检查成本(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)
因此,您可以计算成本累计,而最上面的行包含总成本
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |