- 测试数据:
SQL> create table test1 as select * from dba_objects; Table created. SQL> create table test2 as select * from user_objects; Table created. SQL> create table test3 as select * from dba_objects; Table created.
收集统计信息:
BEGIN DBMS_STATS.GATHER_TABLE_STATS(ownname => ‘SCOTT‘, tabname => ‘TEST1‘, estimate_percent => 100, method_opt => ‘for columns owner size repeat‘, no_invalidate => FALSE, degree => 4, granularity => ‘ALL‘, cascade => TRUE); END; / PL/SQL procedure successfully completed. SQL> with t as(select t1.* from test1 t1,test2 t2 where t1.object_id=t2.object_id) select * from t,test3 t3 where t.object_id=t3.object_id; 11 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 2878150729 ------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 86999 | 16M| | 1605 (1)| 00:00:20 | |* 1 | HASH JOIN | | 86999 | 16M| | 1605 (1)| 00:00:20 | | 2 | TABLE ACCESS FULL | TEST2 | 13 | 65 | | 3 (0)| 00:00:01 | |* 3 | HASH JOIN | | 86999 | 16M| 9352K| 1602 (1)| 00:00:20 | | 4 | TABLE ACCESS FULL| TEST1 | 86997 | 8325K| | 347 (1)| 00:00:05 | | 5 | TABLE ACCESS FULL| TEST3 | 86999 | 8326K| | 347 (1)| 00:00:05 | ------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID") 3 - access("T1"."OBJECT_ID"="T3"."OBJECT_ID") Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 2491 consistent gets 2484 physical reads 0 redo size 3736 bytes sent via SQL*Net to client 523 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 11 rows processed 加 materialize hint,强制oracle生成临时表 SQL> with t as(select /*+ materialize */t1.* from test1 t1,test2 t2 where t1.object_id=t2.object_id) select * from t,test3 t3 where t.object_id=t3.object_id; 11 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3288461629 ---------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 582M| 165G| | 3963 (40)| 00:00:48 | | 1 | TEMP TABLE TRANSFORMATION | | | | | | | | 2 | LOAD AS SELECT | SYS_TEMP_0FD9D661A_155646 | | | | | | |* 3 | HASH JOIN | | 86997 | 8750K| | 351 (1)| 00:00:05 | | 4 | TABLE ACCESS FULL | TEST2 | 13 | 65 | | 3 (0)| 00:00:01 | | 5 | TABLE ACCESS FULL | TEST1 | 86997 | 8325K| | 347 (1)| 00:00:05 | |* 6 | HASH JOIN | | 582M| 165G| 9352K| 3613 (44)| 00:00:44 | | 7 | TABLE ACCESS FULL | TEST3 | 86999 | 8326K| | 347 (1)| 00:00:05 | | 8 | VIEW | | 86997 | 17M| | 332 (1)| 00:00:04 | | 9 | TABLE ACCESS FULL | SYS_TEMP_0FD9D661A_155646 | 86997 | 8750K| | 332 (1)| 00:00:04 | ---------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID") 6 - access("T"."OBJECT_ID"="T3"."OBJECT_ID") Statistics ---------------------------------------------------------- 55 recursive calls 8 db block gets 2525 consistent gets 2485 physical reads 656 redo size 3736 bytes sent via SQL*Net to client 523 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 3 sorts (memory) 0 sorts (disk) 11 rows processed
时间: 2024-10-13 08:50:42