首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Oracle Concept》第二章 - 13

行存储

数据库用数据块来存储行数据。表中每行会包含不多于256列的数据。如果可能,Oracle会将每行作为单独的行片存储。然而,如果一行的所有数据不能插入单独的一个数据块,或者对现有行数据的更新,导致一行数据超过了数据块的容量,此时数据库就会使用多个行片存储这一行(参考“数据块格式”)。簇表中的行和非簇表的行包含相同的信息。此外,簇表中的行还会包含指向他们所属的簇键的信息。

行片

rowid是一个高效的代表某行的10个字节的物理地址。在“rowid数据类型“一节中进行过解释,堆表中的每行都有一个唯一的rowid值,对应到行片的物理地址。对于簇表,属于不同表的行,但是在相同的数据块中存储,就会有相同的rowid。

Oracle内部使用rowid来构建索引。例如,B树索引的每个键值会关联到一个rowid,利用他可以快速指向关联行的地址(参考“B树索引")。物理rowid提供访问表行数据最快的访问方式,能让数据库用最少一个I/O检索到行数据。

参考:

《Oracle Concept》的“rowid格式”章节。

什么是rowid?》。

Null值的存储

null表示某列的值为空。null可以表示缺少值、未值、或者不可用数据。

如果null位于两个数据列之间,那么就会在数据库中存储null。需要1个字节存储列的长度(0)。行尾的null无需存储,因为新的一行的行头会标记前一行的尾列是null。例如如果一张表的最后三个列是null,则这些列不用存储数据。

参考:

《Oracle Database SQL Language Reference》了解更多关于null值的信息。

举报
领券