ROWID是数据的存储位置的内部表示。
行的rowid指定包含该行的数据文件和数据块以及该行在该块中的位置。通过指定行的id查找行是检索单个行的最快方法,因为它指定了行在数据库中的确切位置。
注意:
行号可以在版本之间改变。不建议基于位置访问数据,因为行可以移动。
8.2.3.1当优化器 选择按rowid 访问表时
在大多数情况下,数据库在扫描一个或多个索引之后按rowid访问表。
但是,按rowid进行的表访问不必遵循每次索引扫描。如果索引包含所有需要的列,则可能不会发生按rowid的访问。
8.2.3.2通过ROWID的工作原理表访问
要通过rowid访问表,数据库执行多个步骤。
该数据库执行以下操作:
- 从语句
WHERE子句或通过对一个或多个索引的索引扫描 获得所选行的rowid对于索引中不存在的语句中的列 , 需要表访问。
- 根据行号查找表中的每个选定行
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




