Oracle TABLE ACCESS BY INDEX ROWID 说明(一)

2014-11-24 18:45:13 · 作者: · 浏览: 1

SQL> select * from v$version where rownum=1;


BANNER


--------------------------------------------------------------------------------


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