验证oracle决定使用索引时会使用ROWID来访问数据

当oracle决定使用索引时会使用ROWID来访问数据,根据索引扫描到的每行ROWID,然后通过ROWID再匹配对应的数据行。注:(在索引中,除了存储每个索引值,还存储相应的ROWID)

如下实验:

1)首先我们通过走索引的方式访问表数据:

 
SQL> explain plan for select * from emp where empno=7698;
 
Explained
 
SQL> select * from table(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
--------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    87 |     2   (0)| 00:0
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    87 |     2   (0)| 00:0
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1   (0)| 00:0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7698)
 
14 rows selected

从红色标志来看,oracle根据索引扫描到了14行的ROWID(总共有14条记录),根据扫描到的每行ROWID,再找到表中的数据行。

2)其次我们直接访问ROWID的方式访问数据

SQL> explain plan for select * from emp where rowid='AAASZHAAEAAAACXAAF';
 
Explained
 
SQL> select * from table(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1116584662
--------------------------------------------------------------------------------
| Id  | Operation                  | Name | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |      |     1 |    99 |     1   (0)| 00:00:0
|   1 |  TABLE ACCESS BY USER ROWID| EMP  |     1 |    99 |     1   (0)| 00:00:0
--------------------------------------------------------------------------------
 
8 rows selected

 

如有错误,敬请指正,万分感谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值