ITPub博客

首页 > 数据库 > Oracle > Oracle访问表的执行计划

Oracle访问表的执行计划

原创 Oracle 作者:stonebox1122 时间:2017-05-24 22:16:21 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-13

  • 博文量
    204
  • 访问量
    1188969