数据存放在数据文件中,其属性会随着存储而确定,这些属性包括:在哪个数据文件?属于哪个对象?所在的数据块?行号? 将这些属性合并起来就构成了oracle的ROWID。
所以,rowid详细的记录了数据在磁盘上的位置。简单讲,也叫行地址。
ROWID可分:物理和逻辑。除了IOT使用逻辑ROWID,其他类型的表使用物理ROWID。
ROWID也可分:受限和扩展。8i之后使用扩展rowid。
下面介绍扩展rowid。
扩展rowid,采用64位编码,按6、3开。
例子:
SQL> show user
USER 为 "HR"
SQL> drop table t1 purge;
drop table t1 purge
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> create table t1 (id number,name varchar2(20));
表已创建。
SQL> insert into t1 values(1,'a');
已创建 1 行。
SQL> insert into t1 values(2,'b');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select rowid,t1.* from t1;
ROWID ID NAME
------------------ ---------- ----------------------------------------
AAANFgAAEAAAAHYAAA 1 a
AAANFgAAEAAAAHYAAB 2 b
ROWID的64个编码表
base64表示 |
数字顺序 |
A~Z |
0~25 |
a~z |
26~51 |
0~9 |
52~61 |
+ |
62 |
/ |
63 |
id=1其对应的rowid为:AAANFg AAE AAAAHY AAA
AAANFg:
段编号(对应dba_data_files的data_object_id)。请注意和object_id区别开。object_id是对象编号,唯一标识对象,是对象的身份证(与段编号不同:段一定是对象,但对象不一定是段)。物理位置改变,如移动表空间,则data_object_id便也改变了。对象名改变,则不影响object_id。truncate也会改变段编号,因为truncate是DDL语句,将表的元数据从数据字典删掉,同时退掉HWM,但数据是没有删掉的。
从上表可得:A=0 N=13 F=5 g=32
SQL> select 13*power(64,2)+5*64+32 from dual;
13*POWER(64,2)+5*64+32
----------------------
53600
我们也可以通过dbms_rowid这个包来求:
SQL> select dbms_rowid.rowid_object('AAANFgAAEAAAAHYAAA') from dual;
DBMS_ROWID.ROWID_OBJECT('AAANFGAAEAAAAHYAAA')
---------------------------------------------
53600
AAE
相对文件编号 (relative_fno),表空间级别的。注意和绝对文件编号的区别(file_id),数据库级别的。
AAAAHY
数据块号
AAA
行号
ROWID在oracle中的地位不言而喻。索引的本质,也就是利用ROWID,因为索引保存了rowid,根据rowid再到数据表中定位记录。想象一本书,索引是目录,书的内容是数据,那么rowid便是联系目录和内容的那一个“页码”。
分享到:
相关推荐
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个...要理解索引,必须先搞清楚ROWID。B-Tree索引的每个索引条目具有两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引
1.5 理解 CREATE DATABASE 命令 1.6 创建数据库的技术 1.6.1 利用 Oracle 安装程序创建数据库 1.6.2 使用安装程序创建数据库的注意 事项 1.6.3 怎样建立自己的定制数据库创建 脚本 1.6.4 如何从已有数据库...
24.理解和使用Oracle 8i分析工具-LogMiner 25.哪些初始化参数最影响Oracle系统性能 26.你的SQL语句在什么情况下使用全表扫描? 27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使...
=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...
§5.1 理解ORACLE性能优化 82 §5.1.1 响应时间与吞吐量的折衷 82 §5.1.2 临界资源 83 §5.1.3 过度请求的影响 83 §5.1.4 调整以解决问题 83 §5.2 优化的执行者 84 §5.3 设置性能目标 84 第7章 系统优化方法 85 ...
3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...
如何来理解rowid的潜在瓶颈并调试验证。 本文要和大家一起讨论这几个问题,测试的环境基于MySQL 5.7.19版本。 问题1、如何感受到rowid的存在 我们不妨通过一个案例来进行说明。 记得有一天统计备份数据的时候,写...
§1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24 §1.2.2 数据字典概念 25 §1.3 SQL、SQL*Plus及 PL/SQL 25 §...
1.3.2 理解并发控制 14 1.3.3 多版本 19 1.3.4 数据库独立性? 25 1.3.5 “怎么能让应用运行得更快?” 41 1.3.6 DBA与开发人员的关系 45 1.4 小结 46 第2章 体系结构概述 47 2.1 定义数据库和实例 48 2.2 ...
1.3.2 理解并发控制...................................................................... 78 1.3.3 多版本.............................................................................. 84 1.3.4 数据库...
1.理解Oracle的Rowid含义 2.怎么样管理Oracle的内存 3.怎么样使用物化视图来同步数据 4.怎么样在线创建索引或者重构索引/表 5.怎么样编译失效对象 6.怎么样在管理自动undo表空间 7.怎么样管理临时表空间与临时...
1.2.1.9 ORACLE ROWID ....................................................................... 1.2.1.10 选择性 ................................................................................. 1.2.1.11 ...
内容导航1、定义2、代码案例 1、定义 简单表达式是由指定列、伪列、常数、序列或null...在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表。一个用户想访问另外一个用
§1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24 §1.2.2 数据字典概念 25 §1.3 SQL、SQL*Plus及 PL/SQL 25 §...