Oracle訪問索引的執行計劃(二)

stonebox1122發表於2017-05-26

Oracle訪問索引的執行計劃(一)


如果目標SQL對有唯一索引欄位指定範圍查詢條件,則會使用索引範圍掃描,而對於非唯一索引欄位,不管指定什麼查詢條件,均不會使用索引唯一掃描。索引範圍掃描的執行計劃為INDEX RANGE SCAN。

 

檢視HR使用者下EMPLOYEES表的EMPLOYEE_ID欄位的索引,為唯一索引。
SQL> select a.table_name,column_name,a.index_name,index_type,uniqueness from user_indexes a,user_ind_columns b where a.index_name=b.index_name and a.table_name='EMPLOYEES' and column_name='EMPLOYEE_ID';

TABLE_NAME           COLUMN_NAME          INDEX_NAME           INDEX_TYPE           UNIQUENES
-------------------- -------------------- -------------------- -------------------- ---------
EMPLOYEES            EMPLOYEE_ID          EMP_EMP_ID_PK        NORMAL               UNIQUE

 

使用範圍查詢條件:
SQL> select employee_id,last_name,salary from employees where employee_id between 100 and 110;

11 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 603312277

---------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |    11 |   176 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES     |    11 |   176 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | EMP_EMP_ID_PK |    11 |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------


檢視HR使用者下EMPLOYEES表的LAST_NAME欄位的索引,為非唯一索引。
SQL> select a.table_name,column_name,a.index_name,index_type,uniqueness from user_indexes a,user_ind_columns b where a.index_name=b.index_name and a.table_name='EMPLOYEES' and column_name='LAST_NAME';

TABLE_NAME      COLUMN_NAME     INDEX_NAME      INDEX_TYPE      UNIQUENES
--------------- --------------- --------------- --------------- ---------
EMPLOYEES       LAST_NAME       EMP_NAME_IX     NORMAL          NONUNIQUE

 

使用等值查詢條件:

SQL> select employee_id,last_name,salary from employees where last_name='Lee';


Execution Plan
----------------------------------------------------------
Plan hash value: 2077747057

-------------------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     1 |    16 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES   |     1 |    16 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | EMP_NAME_IX |     1 |       |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2139955/,如需轉載,請註明出處,否則將追究法律責任。

相關文章