暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 按Rowid进行表访问

原创 Asher.HU 2021-02-04
646

ROWID是数据的存储位置的内部表示。

行的rowid指定包含该行的数据文件和数据块以及该行在该块中的位置。通过指定行的id查找行是检索单个行的最快方法,因为它指定了行在数据库中的确切位置。

注意:

行号可以在版本之间改变。不建议基于位置访问数据,因为行可以移动。




8.2.3.1当优化器 选择按rowid 访问表时

在大多数情况下,数据库在扫描一个或多个索引之后按rowid访问表。

但是,按rowid进行的表访问不必遵循每次索引扫描。如果索引包含所有需要的列,则可能不会发生按rowid的访问


8.2.3.2通过ROWID的工作原理表访问

要通过rowid访问表,数据库执行多个步骤。

该数据库执行以下操作:

  1. 从语句WHERE子句或通过对一个或多个索引的索引扫描 获得所选行的rowid

    对于索引中不存在的语句中的列 , 需要表访问。

  2. 根据行号查找表中的每个选定行


8.2.3.3按Rowid进行表访问:示例

本示例演示了对hr.employees表的rowid访问

假设您运行以下查询:

SELECT * 
FROM   employees 
WHERE  employee_id > 190;
复制

以下计划的步骤2显示了emp_emp_id_pk上索引的范围扫描hr.employees数据库使用从索引中获得的rowid从employees表中查找相应的行,然后检索它们。

BATCHED步骤1中显示访问权限意味着数据库从索引中检索了一些rowid,然后尝试按块顺序访问行,以改善群集并减少数据库必须访问块次数。

--------------------------------------------------------------------------------
|Id| Operation                           | Name     |Rows|Bytes|Cost(%CPU)|Time|
--------------------------------------------------------------------------------
| 0| SELECT STATEMENT                    |             |  |    |2(100)|        |
| 1|  TABLE ACCESS BY INDEX ROWID BATCHED|EMPLOYEES    |16|1104|2  (0)|00:00:01|
|*2|   INDEX RANGE SCAN                  |EMP_EMP_ID_PK|16|    |1  (0)|00:00:01|
--------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("EMPLOYEE_ID">190)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论