Oracle数据库表存储基本概述

Oracle数据库表存储基本概述

Oracle 数据库使用表空间中的数据段保存表数据。段包含由数据块组成的扩展盘区。

表数据段位于表所有者的默认空间中,或CREATE TABLE 语句中所指定的表空间中。

表组织

默认情况下,表按堆的形式来组织数据,这意味着数据库将行存放在最适合他们的位置,而不是按用户指定的顺序来存放。因此,堆组织表是一个无序的行的集合。当用户往其中添加行时,数据库将行置于在数据段中第一个可用的空闲空间。不能保证行按照插入它们的顺序进行检索。

列顺序

列的顺序对于表中的所有行都是相同的。通常,数据库按它们被列在CREATE TABLE 语句中的列顺序来存储列,但这个顺序是不保证的。例如,如果表中有 LONG 类型的列,那么数据库总是将其存储到行中的最后一列。此外,如果向表中添加一个新列,则新列将被存储为最后一列。

与常规列不同,表可以包含虚拟列,它不占用磁盘上的空间。数据库通过计算一组用户指定的表达式或函数,在虚拟列中按需派生一个值。可以对虚拟列创建索引、 收集统计数据、并创建完整性约束。因此,虚拟列非常像非虚拟列。

行存储

数据库将行存储在数据块中。在表中,少于 256 个列的行,被存储在一个或多个行片中。

数据库尽可能将每一行作为一个行片来存储。但是,如果所有的行数据不能插入到一个单一数据块中,或者对现有的行的更新导致行溢出,则数据库使用多个行片来存储此行。

备注:表簇中的行除了包含非聚集表中的行相同的信息,还包含对其所属簇键的引用信息,后续文章单独介绍。

行片Rowids

rowid 实际上是行的一个 10 字节的物理地址。

堆组织表中的每一行都有一个在该表中唯一的 rowid,与一个行片的物理地址相对应。

对于表簇,处于同一个数据块的不同表中的行可以有相同的rowid,后续文章单独介绍。。

Oracle 数据库在内部使用 rowids 来构建索引。例如,在 B 树索引中的每个键与一个指向关联行地址的 rowid 相关联,以便快速访问。物理 rowids 提供对表行尽可能最快的访问,使数据库几乎只需单次I/O 就可以检索到行。

表压缩

数据库可以使用表压缩来消除数据块中的重复值。

对于数据高度冗余的表,压缩可以节省磁盘空间,减少数据库高速缓存中的内存使用,并在某些情况下可以加快查询执行速度。

表压缩对数据库应用程序是透明的。

Oracle 数据库支持两种类型的表压缩:基本表压缩和OLTP 表压缩

基本表压缩

这种类型的压缩只能压缩由直接路径加载插入的数据,只支持有限的数据类型和 SQL 操作。

OLTP 表压缩

这种类型的压缩用于 OLTP 应用程序,并可压缩任何 SQL 操作的数据。

数据库以行主要格式存储压缩行。一个行的所有列都存储在一起,接下来是下一行的所有列,依次类推。

重复值被替换为一个存储在块开始处的符号表短引用。因此,重新创建未压缩数据所需的信息存储在数据块本身中。

压缩的数据块看起来跟正常的数据块差不多。在常规数据块上能正常工作的大多数数据库功能,也可以在压缩的数据块上正常工作。

空值存储

空值是指在某个列中值的缺失。空值表示缺少、 未知、或不适用的数据。

在数据库中,如果在空值的前后都有数据值,则空值会被存储。在这些情况下,他们需要 1 个字节来存储列的长度(零)。

尾随的空值在行中不需要存储,因为新的行头标志着前一行中的剩余列都为空。例如,如果表的最后三列为空,则不为这些列存储数据。

相关推荐
倔强的石头_2 小时前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_3 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神4 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据5 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡5 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧5 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon5 天前
SQL学习指南——视图
数据库·sql