首批通过分布式安全可靠测评,为关键业务系统打造
表存储
更新时间:2025-11-12 14:33:17
OceanBase 数据库中使用宏块来存储数据,每张表可能包含多个宏块,每个宏块占用 2M 空间。宏块内包含一个或者多个微块,每个微块内包含一行或者多行数据。
表的组织形式
OceanBase 数据库支持索引组织表(Index Organized Table)和堆组织表(Heap Organized Table)两种表的组织形式。
索引组织表
索引组织表中数据是按照主键存储和排序的,当往表中插入一行数据时,数据会按照其主键的顺序插入到表中。在这种结构下,数据和索引合二为一,主键为聚簇索引,主键不存在额外的空间开销,数据的访问也更加高效。
每行存储的列顺序是一样的。OceanBase 数据库通常是按照建表时的列顺序来存储,新加的列都放在最后一列存储。
堆组织表(堆表)
堆组织表中数据不会根据主键排序存储,当往表中插入一行数据时,数据的顺序是随机的。在这种结构下,主键索引实际为二级唯一索引,即非聚簇索引,数据和索引解耦,数据写入不需要考虑排序,使得数据的写入性能更佳。
堆组织表中的数据是无序的,尽管索引能够使键值保持有序,但数据本身并不具备任何特定的顺序。
行存储
行存储在微块中,一般情况下,行的所有列都是存储在一起的。当表中有大对象类型时,其所占用的存储空间会超过宏块大小,此时会将大对象类型溢出存储到其他的宏块中。
列存储
列存储是一种数据库存储方式,它将数据按照列的方式进行存储。在列存模式下,每个列的数据存储为一个独立的 SSTable,而所有列的 SSTable 会组合成一个虚拟的 SSTable,作为用户的列存基线数据。这种方式可以有效地提高查询性能和降低存储空间的消耗。
空值存储
OceanBase 数据库中会存储空值,在存储中会使用一个字节来标记某列是否为空。