SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release11.2.0.3.0 - 64bit Production
SQL> create table dave as selectobject_id,object_name,object_type,created,timestamp,status from all_objects;
表已创建。
SQL> create table dave2 as select * from dave;
表已创建。
--收集统计信息,这里没有收集直方图:
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname =>'DAVE',estimate_percent => 10 ,method_opt =>'FORCOLUMNS size 1',degree=>10,cascade => true);
PL/SQL 过程已成功完成。
SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname =>'DAVE2',estimate_percent => 10 ,method_opt =>'FORCOLUMNS size 1',degree=>10,cascade => true);
PL/SQL 过程已成功完成。
--避免其他影响,先刷新buffer cache:
SQL> alter system flush buffer_cache;
系统已更改。
--查看全表扫描时的执行计划:
SQL> set autot traceonly
SQL> select d1.object_name,d2.object_type fromdave d1,dave2 d2 where d1.object_id=d2.object_id;
已选择72762行。
执行计划
----------------------------------------------------------
Plan hash value: 3613449503
------------------------------------------------------------------------------------
| Id |Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
------------------------------------------------------------------------------------
| 0 |SELECT STATEMENT | | 72520 | 3824K| | 695 (1)| 00:00:09 |
|* 1 | HASH JOIN | | 72520 | 3824K| 2536K| 695 (1)| 00:00:09 |
| 2 | TABLE ACCESS FULL| DAVE2 | 71990 | 1687K| | 213 (1)| 00:00:03 |
| 3 | TABLE ACCESS FULL| DAVE | 72520 | 2124K| | 213 (1)| 00:00:03 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 -access("D1"."OBJECT_ID"="D2"."OBJECT_ID")
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
6353 consistent gets
1558 physical reads
0 redo size
3388939 bytes sent via SQL*Net toclient
53874 bytes received via SQL*Netfrom client
4852 SQL*Net roundtrips to/fromclient
0 sorts (memory)
0 sorts (disk)
72762 rows processed
--这里产生了1558的物理读
SQL>
--在object_id上创建索引:
SQL> create index idx_dave_object_idon dave(object_id);
索引已创建。
SQL> create index idx_dave_object_id2 ondave2(object_id);
索引已创建。
--在次查看执行计划:
SQL> select d1.object_name,d2.object_type fromdave d1,dave2 d2 where d1.object_id=d2.object_id;
已选择72762行。
执行计划
----------------------------------------------------------
Plan hash value: 3613449503
------------------------------------------------------------------------------------
| Id |Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
------------------------------------------------------------------------------------
| 0 |SELECT STATEMENT | | 72520 | 3824K| | 695 (1)| 00:00:09 |
|* 1 | HASH JOIN | | 72520 | 3824K| 2536K| 695 (1)| 00:00:09 |
| 2 | TABLE ACCESS FULL| DAVE2 | 71990 | 1687K| | 213 (1)| 00:00:03 |
| 3 | TABLE ACCESS FULL| DAVE | 72520 | 2124K| | 213 (1)| 00:00:03 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 -access("D1"."OBJECT_ID"="D2"."OBJECT_ID")
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
6353 consistent gets
0 physical reads
0 redo size
3388939 bytes sent via SQL*Net toclient
53874 bytes received via SQL*Netfrom client
4852 SQL*Net roundtrips to/fromclient
0 sorts (memory)
0 sorts (disk)
72762 rows processed
这里的物理读为0. 但是还是走的是全表扫描。
--刷新一下buffer,增加索引条件:
SQL> alter system flush buffer_cache;
系统已更改。
SQL> select d1.object_name,d2.object_type fromdave d1,dave2 d2 where d1.object_id=d2.object_id and d1.object_id