`
java-mans
  • 浏览: 11452964 次
文章分类
社区版块
存档分类
最新评论

理解oracle ROWID

 
阅读更多

数据存放在数据文件中,其属性会随着存储而确定,这些属性包括:在哪个数据文件?属于哪个对象?所在的数据块?行号? 将这些属性合并起来就构成了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便是联系目录和内容的那一个“页码”。

分享到:
评论

相关推荐

    Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个...要理解索引,必须先搞清楚ROWID。B-Tree索引的每个索引条目具有两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引

    Oracle数据库管理员技术指南

    1.5 理解 CREATE DATABASE 命令 1.6 创建数据库的技术 1.6.1 利用 Oracle 安装程序创建数据库 1.6.2 使用安装程序创建数据库的注意 事项 1.6.3 怎样建立自己的定制数据库创建 脚本 1.6.4 如何从已有数据库...

    Oracle数据库学习指南

    24.理解和使用Oracle 8i分析工具-LogMiner 25.哪些初始化参数最影响Oracle系统性能 26.你的SQL语句在什么情况下使用全表扫描? 27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使...

    对于 Oracle 的 rownum 问题

    =),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...

    ORACLE9i_优化设计与系统调整

    §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 ...

    ORACLE重建索引总结

    3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...

    MySQL中主键与rowid的使用陷阱总结

    如何来理解rowid的潜在瓶颈并调试验证。 本文要和大家一起讨论这几个问题,测试的环境基于MySQL 5.7.19版本。 问题1、如何感受到rowid的存在 我们不妨通过一个案例来进行说明。 记得有一天统计备份数据的时候,写...

    Oracle8i_9i数据库基础

    §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 §...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    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 ...

    Oracle编程艺术

    1.3.2 理解并发控制...................................................................... 78 1.3.3 多版本.............................................................................. 84 1.3.4 数据库...

    SQL&PL SQL FAQ第二版

    1.理解Oracle的Rowid含义 2.怎么样管理Oracle的内存 3.怎么样使用物化视图来同步数据 4.怎么样在线创建索引或者重构索引/表 5.怎么样编译失效对象 6.怎么样在管理自动undo表空间 7.怎么样管理临时表空间与临时...

    TianleSoftware Oracle中文学习手册

    1.2.1.9 ORACLE ROWID ....................................................................... 1.2.1.10 选择性 ................................................................................. 1.2.1.11 ...

    《Oracle Database编程指南》14-01:简单表达式(Simple Expressions)

    内容导航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 §...

Global site tag (gtag.js) - Google Analytics