|
Re: 谁能解释这种奇怪的现象?
最初由 超级野人 发布
[B]每次插入字母后,行长度的值却是很准确的,一直在变化,不知道这是什么回事,难道oracle设定每一row的数据存储空间必须不小于4个字节么。 [/B]
SELECT SUBSTR(ROWID,1,6) "OBJECT",SUBSTR(ROWID,7,3) "FIL",SUBSTR(ROWID,10,6) "BLOCK",SUBSTR(ROWID,16,3) "ROW" FROM t1;
OBJECT FIL BLOCK ROW
------------ ------ ------------ ------
AAAMnv AAB AAAOrq AAA
我赞成这种现象用ROWID来说明比较合理:
因为一旦数据保存到数据块中,它的rowid就不会变化,当发生行迁移时,应用只能根据rowid找到数据迁移前数据的存储地址,所以在原数据存储地址必须保存当前数据存储的物理地址,因为发生行迁移objectid不会发生变化,所以用六个字节可以保持数据当前存储物理位置;
为了在性能与空间的平衡,oracle至少会预留六个字节保存行迁移信息,当插入数据小于6字节时,oracle会预先分配6字节,若(数据5字节+1 column length)蛮六字节,则在发生行迁移时可以利用这些空间保存行迁移的信息. |
|