索引唯一扫描
如果查询只需要从表中获取单个行,数据库就执行索引唯一扫描。当查询只包含某个唯一索引中的列时,数据库使用索引唯一扫描。当查询在主键约束列上指定了相等条件时,数据库也使用索引唯一扫描。
在下面的例子中,在列employee_id上有主键约束,因此查询通过谓词”where employee_id=200″保证只访问一行。
SQL> select * from emp where employee_id=200; EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID ----------- -------------------- ------------------------- ------------------------- -------------------- ------------ ---------- ---------- -------------- ---------- ------------- 200 Jennifer Whalen JWHALEN 515.123.4444 17-SEP-03 AD_ASST 4400 101 10 Execution Plan ---------------------------------------------------------- Plan hash value: 4024650034 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 69 | 1 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 69 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | EMP_PK | 1 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("EMPLOYEE_ID"=200)
在这个例子中,数据库使用列employee_id上的主键(emp_pk)。注意,在指定了某个唯一索引的所有列时,数据库也很可能执行索引唯一扫描。