Oracle訪問索引的執行計劃(三)
Oracle訪問索引的執行計劃(一)
Oracle訪問索引的執行計劃(二)
當需要獲取某個欄位的全部資料時,如果該欄位非空且有索引,或者透過where條件將空值排除掉,則可能會使用索引全掃描(INDEX FULL SCAN)。
檢視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
檢視HR使用者下EMPLOYEES表的LAST_NAME欄位為非空。
SQL> select table_name,column_name,nullable from user_tab_columns where table_name='EMPLOYEES' and column_name='LAST_NAME';
TABLE_NAME COLUMN_NAME N
------------------------------ ------------------------------ -
EMPLOYEES LAST_NAME N
檢視獲取last_name這個欄位的所有記錄的執行計劃:
SQL> select last_name from employees;
107 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2228653197
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 107 | 856 | 1 (0)| 00:00:01 |
| 1 | INDEX FULL SCAN | EMP_NAME_IX | 107 | 856 | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------
檢視HR使用者下EMPLOYEES表的DEPARTMENT_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='DEPARTMENT_ID';
TABLE_NAME COLUMN_NAME INDEX_NAME INDEX_TYPE UNIQUENES
--------------- --------------- -------------------- --------------- ---------
EMPLOYEES DEPARTMENT_ID EMP_DEPARTMENT_IX NORMAL NONUNIQUE
檢視HR使用者下EMPLOYEES表的DEPARTMENT_ID欄位,可以為空。
SQL> select table_name,column_name,nullable from user_tab_columns where table_name='EMPLOYEES' and column_name='DEPARTMENT_ID';
TABLE_NAME COLUMN_NAME N
--------------- --------------- -
EMPLOYEES DEPARTMENT_ID Y
檢視獲取department_id這個欄位的所有非空記錄的執行計劃:
SQL> select department_id from employees where department_id is not null;
106 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3420648541
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 106 | 318 | 1 (0)| 00:00:01 |
|* 1 | INDEX FULL SCAN | EMP_DEPARTMENT_IX | 106 | 318 | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
從上面的執行計劃可以看出,由於索引鍵值就是查詢結果,所有就不需要回表了。
索引全掃描會對目標索引的所有葉子塊從左到右依次順序掃描,所以它的結果是有序的。也就是說索引全掃描是不能夠並行執行的,並且通常情況下使用的是單塊讀,產生db file sequential reads事件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2140022/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle訪問索引的執行計劃(一)Oracle索引
- Oracle訪問索引的執行計劃(二)Oracle索引
- Oracle訪問索引的執行計劃(四)Oracle索引
- Oracle訪問索引的執行計劃(五)Oracle索引
- Oracle訪問表的執行計劃Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- Oracle 執行計劃 訪問路徑Oracle
- Oracle 索引和執行計劃Oracle索引
- Oracle檢視執行計劃(三)Oracle
- 執行計劃-資料訪問方式(全表掃描與4種索引的方式)索引
- mysql索引和執行計劃MySql索引
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL
- ORACLE執行計劃Oracle
- oracle執行計劃------未走索引,隱式轉換的坑Oracle索引
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 建立索引調整sql的執行計劃索引SQL
- 關於索引的執行計劃記載索引
- mysql 執行計劃索引分析筆記MySql索引筆記
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- 如何讓Oracle產生預期的執行計劃(三)Oracle
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- 索引及排序對執行計劃的影響索引排序
- 看懂Oracle中的執行計劃Oracle
- ORACLE執行計劃的介紹Oracle
- ORACLE執行計劃的檢視Oracle
- oracle執行計劃的使用(EXPLAIN)OracleAI
- Oracle 索引訪問方式Oracle索引
- Oracle中檢視已執行sql的執行計劃OracleSQL
- 【執行計劃】資料訪問方式,連線方式及方法
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle