Вы можете быстро подтвердить, что ваш репетитор неправ.
Выполнить план объяснения для некоторого утверждения и проверить стоимость в верхней строке (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)
Теперь запустите оператор и получите 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
Таким образом, вы видите, что стоимость рассчитывается нарастающим итогом, а верхняя строка содержит общие затраты