|
To Huang Yong
oracle的执行计划中的数据基本正确, 您所说的1, 准确的说应该是 20/19,但是oracle只精确到个位,所以是1. 在下面的第二个例子中,它就变成2了, 因为38/19=2
ORACLE@QIHUA SQL> create table t1 as select rownum a from dual connect by rownum<=19;
Table created.
ORACLE@QIHUA SQL> create table t2 as select rownum a from dual connect by rownum<=19;
Table created.
ORACLE@QIHUA SQL> insert into t2 values(10);
1 row created.
ORACLE@QIHUA SQL> commit;
Commit complete.
ORACLE@QIHUA SQL> exec dbms_stats.gather_table_stats(ownname => null,tabname => 'T1');
PL/SQL procedure successfully completed.
ORACLE@QIHUA SQL> exec dbms_stats.gather_table_stats(ownname => null,tabname => 'T2');
PL/SQL procedure successfully completed.
ORACLE@QIHUA SQL>
ORACLE@QIHUA SQL> set autotrace traceonly
ORACLE@QIHUA SQL> select /*+ leading(t1,t2) use_nl(t2,t1) */ * from t1 ,t2 where t1.a=t2.a;
20 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3811625520
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20 | 120 | 8 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 20 | 120 | 8 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| T1 | 19 | 57 | 2 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| T2 | 1 | 3 | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------
ORACLE@QIHUA SQL> set autotrace off
ORACLE@QIHUA SQL>
ORACLE@QIHUA SQL> drop table t1;
Table dropped.
ORACLE@QIHUA SQL> drop table t2;
Table dropped.
ORACLE@QIHUA SQL> create table t1 as select rownum a from dual connect by rownum<=19;
Table created.
ORACLE@QIHUA SQL> create table t2 as select rownum a from dual connect by rownum<=19;
Table created.
ORACLE@QIHUA SQL> insert into t2 select * from t2;
19 rows created.
ORACLE@QIHUA SQL> commit;
Commit complete.
ORACLE@QIHUA SQL> exec dbms_stats.gather_table_stats(ownname => null,tabname => 'T1');
PL/SQL procedure successfully completed.
ORACLE@QIHUA SQL> exec dbms_stats.gather_table_stats(ownname => null,tabname => 'T2');
PL/SQL procedure successfully completed.
ORACLE@QIHUA SQL> set autotrace traceonly
ORACLE@QIHUA SQL> select /*+ leading(t1,t2) use_nl(t2,t1) */ * from t1 ,t2 where t1.a=t2.a;
38 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3811625520
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 38 | 228 | 8 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 38 | 228 | 8 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| T1 | 19 | 57 | 2 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| T2 | 2 | 6 | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------- |
|