大家都知道,数据是以行为单位存储在数据块中的,每一行都有一个唯一的标识地址rowid,通过rowid,oracle可以快速的定位某行具体的数据的位置,那么先来介绍下rowid:
一、ROWID简介:
rowid可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。
rowid的表现形式:
我们从rowid伪列里select出来的rowid是基于base64编码,一共有18位,分为4部分:
OOOOOOFFFBBBBBBRRR 6位 + 3位 + 6位 + 3位;
例如:
其中:
前6位(OOOOOO)表示data object id,根据object id可以确定segment;
中间3位(FFF)表示相对文件号。根据该相对文件号可以得到绝对文件号,从而确定datafile;
中间6位(BBBBBB)表示data block number,这里的data block number是相对于datafile的编号,而不是相对于tablespace的编号;
最后3为(RRR)表示row number。