首页 > 数据库 > Oracle > 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博客 ” ,链接:https://blog.itpub.net/28536251/viewspace-2139955/ ,如需转载,请注明出处,否则将追究法律责任。