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