Oracle訪問表的執行計劃

stonebox1122發表於2017-05-24

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章