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 个字节来存储列的长度(零)。

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

相关推荐
dLYG DUMS25 分钟前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
苍煜1 小时前
MySQL分库分表和ES到底怎么选?
数据库·mysql·elasticsearch
茉莉玫瑰花茶1 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
czlczl200209252 小时前
松散索引扫描/跳跃索引扫描
数据库·mysql·性能优化
星马梦缘3 小时前
数据库作战记录 实验7、8
数据库·sql·oracle
安逸sgr4 小时前
Hermes Agent + Obsidian 打造第二大脑(六):分层记忆系统的设计逻辑——L0/L1/L2/L3 四层记忆详解
数据库·agent·知识库·hermes·hermesagent
苍煜4 小时前
一篇讲懂分库分表:概念、spirngboot实战
数据库·oracle
梦想画家4 小时前
PostgreSQL 物化视图实战:从数据固化到智能刷新的全链路指南
数据库·postgresql·物化视图
weoptions4 小时前
简单sql注入中如何通过简单语句判断注入类型&注入方法
数据库·sql
小短腿的代码世界5 小时前
Qt数据库编程深度解析:从SQL基础到ORM架构设计
数据库·sql·qt