Oracle訪問表的執行計劃
Oracle訪問表的方法有2種。
一種是全表掃描,使用多塊讀,需要讀取該表高水位下的所有塊。對應的執行計劃為TABLE ACCESS FULL。
SQL> select * from employees;
107 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1445457117
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 107 | 7383 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMPLOYEES | 107 | 7383 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------
另一種是ROWID掃描,大部分情況下ROWID都是透過訪問索引獲得的,然後再透過ROWID回表訪問對應的記錄,其執行計劃為TABLE ACCESS BY INDEX ROWID,當然也可以直接指定ROWID進行訪問對應的記錄,其執行計劃為TABLE ACCESS BY USER ROWID。
SQL> select employee_id,salary from employees where employee_id=100;
Execution Plan
----------------------------------------------------------
Plan hash value: 1833546154
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 1 | 8 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | EMP_EMP_ID_PK | 1 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
以上執行計劃的意思就是透過掃描索引獲取對應記錄的ROWID,再透過ROWID回表獲取對應的記錄。直接指定ROWID訪問表記錄的執行計劃如下:
SQL> select employee_id,salary from employees where rowid='AAAXhIAAEAAABEDAAA';
Execution Plan
----------------------------------------------------------
Plan hash value: 549062733
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 20 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY USER ROWID| EMPLOYEES | 1 | 20 | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2139826/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle訪問索引的執行計劃(一)Oracle索引
- Oracle訪問索引的執行計劃(二)Oracle索引
- Oracle訪問索引的執行計劃(三)Oracle索引
- Oracle訪問索引的執行計劃(四)Oracle索引
- Oracle訪問索引的執行計劃(五)Oracle索引
- Oracle 執行計劃 訪問路徑Oracle
- oracle分割槽表執行計劃Oracle
- Oracle動態執行表不可訪問Oracle
- ORACLE執行計劃Oracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 執行計劃-資料訪問方式(全表掃描與4種索引的方式)索引
- oracle查詢語句執行計劃中的表消除Oracle
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 看懂Oracle中的執行計劃Oracle
- ORACLE執行計劃的介紹Oracle
- ORACLE執行計劃的檢視Oracle
- oracle執行計劃的使用(EXPLAIN)OracleAI
- Oracle中檢視已執行sql的執行計劃OracleSQL
- 【執行計劃】資料訪問方式,連線方式及方法
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle 索引和執行計劃Oracle索引
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- 10月份計劃表(每日執行)
- Oracle檢視執行計劃的命令Oracle
- Oracle獲取執行計劃的方法Oracle
- oracle檢視執行計劃的方法Oracle
- 怎樣看懂Oracle的執行計劃Oracle
- 解析Oracle執行計劃的結果Oracle
- Oracle 檢視SQL的執行計劃OracleSQL
- 分割槽表與堆表執行計劃的不同