本篇記錄一些Oracle表訪問方式
索引訪問方式請參考:
顯示執行計畫的預存程序請參考
(1)TABLE ACCESS FULL
全表掃表,使用全表掃描的方式訪問表。樣本:
SQL> exec sql_explain('select * from t1');
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 80 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T1 | 10 | 80 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
PL/SQL procedure successfully completed.
(2)TABLE ACCESS BY INDEX ROWID
通過索引獲得的ROWID訪問表。
樣本:
SQL> exec sql_explain('select * from t1 where id=1');
Plan hash value: 2347959165
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 8 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | T1_PK | 1 | | 0 (0)| 00:00:01 |
-------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=1)
PL/SQL procedure successfully completed.
(3)LOAD AS SELECT
以(append)追加的方式向表中插入資料。
樣本:
SQL> exec sql_explain('insert /*+ append */ into t1 select * from t1');
Plan hash value: 1069440229
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 10 | 80 | 3 (0)| 00:00:01 |
| 1 | LOAD AS SELECT | T1 | | | | |
| 2 | TABLE ACCESS FULL| T1 | 10 | 80 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
PL/SQL procedure successfully completed.