SQL> select * from table(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST PEEKED_BINDS cost'));
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 44fnr5suadyjd, child number 0
-------------------------------------
select * from t1 full outer join t2 on t1.id=t2.id
Plan hash value: 53297166
-------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)| OMem | 1Mem | Used-Mem |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 79 (100)| | | |
| 1 | VIEW | VW_FOJ_0 | 10000 | 79 (2)| | | |
|* 2 | HASH JOIN FULL OUTER| | 10000 | 79 (2)| 1693K| 1042K| 2652K (0)|
| 3 | TABLE ACCESS FULL | T1 | 10000 | 39 (0)| | | |
| 4 | TABLE ACCESS FULL | T2 | 10000 | 39 (0)| | | |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("T1"."ID"="T2"."ID")Note
-----
- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level
27 rows selected.
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
284 consistent gets
0 physical reads
0 redo size
139875 bytes sent via SQL*Net to client
1070 bytes received via SQL*Net from client
52 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
10001 rows processed--仅仅284个逻辑读。
SQL> alter session set "_optimizer_native_full_outer_join"=off ;
Session altered.
SQL> set autotrace traceonly ;
SQL> select * from t1 full outer join t2 on t1.id=t2.id;
10001 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2649631981
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10100 | 1084K| 157 (1)| 00:00:02 |
| 1 | VIEW | | 10100 | 1084K| 157 (1)| 00:00:02 |
| 2 | UNION-ALL | | | | | |
|* 3 | HASH JOIN OUTER | | 10000 | 1660K| 79 (2)| 00:00:01 |
| 4 | TABLE ACCESS FULL | T1 | 10000 | 830K| 39 (0)| 00:00:01 |
| 5 | TABLE ACCESS FULL | T2 | 10000 | 830K| 39 (0)| 00:00:01 |
|* 6 | HASH JOIN RIGHT ANTI| | 100 | 8900 | 79 (2)| 00:00:01 |
| 7 | TABLE ACCESS FULL | T1 | 10000 | 40000 | 39 (0)| 00:00:01 |
| 8 | TABLE ACCESS FULL | T2 | 10000 | 830K| 39 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("T1"."ID"="T2"."ID"(+))
6 - access("T1"."ID"="T2"."ID")Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
542 consistent gets
0 physical reads
0 redo size
139875 bytes sent via SQL*Net to client
1070 bytes received via SQL*Net from client
52 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
10001 rows processed
-- 可以发现逻辑读是542,几乎是前者的两倍。
SQL> @hide full_outer_join
old 10: and a.ksppinm like '%&1%'
new 10: and a.ksppinm like '%full_outer_join%'
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE
---------------------------------- -------------------------------------------------- ---------------------- ---------------------- ----------------------
_optimizer_native_full_outer_join execute full outer join using native implementaion TRUE off off
SQL> alter session set "_optimizer_native_full_outer_join"=force ;
Session altered.
SQL> set autot traceonly
SQL> select * from t1 full outer join t2 on t1.id=t2.id;
10001 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 53297166
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10000 | 1074K| 65 (2)| 00:00:01 |
| 1 | VIEW | VW_FOJ_0 | 10000 | 1074K| 65 (2)| 00:00:01 |
|* 2 | HASH JOIN FULL OUTER| | 10000 | 1640K| 65 (2)| 00:00:01 |
| 3 | TABLE ACCESS FULL | T1 | 10000 | 820K| 32 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL | T2 | 10000 | 820K| 32 (0)| 00:00:01 |
----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("T1"."ID"="T2"."ID")
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
284 consistent gets
0 physical reads
0 redo size
139691 bytes sent via SQL*Net to client
1041 bytes received via SQL*Net from client
52 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
10001 rows processed
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-716995/ ,如需转载,请注明出处,否则将追究法律责任。