大家都知道,數據是以行爲單位存儲在數據塊中的,每一行都有一個唯一的標識地址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。