值压缩

值压缩针对数据的表示以及数据库管理系统内部用来存储数据的存储器结构来优化空间使用情况。 值压缩涉及移除一个值的重复条目,仅存储一个副本。 存储的副本记录对存储值的任何引用的位置。

创建表时,可使用 CREATE TABLE 语句的可选 VALUE COMPRESSION 子句来指定表将使用值压缩功能。 通过使用 ALTER TABLE 语句的 ACTIVATE VALUE COMPRESSION 子句,可以在现有的表中启用值压缩功能。 要在表中禁用值压缩功能,请使用 ALTER TABLE 语句的 DEACTIVATE VALUE COMPRESSION 子句。

使用 VALUE COMPRESSION 时,不会将已指定给已定义的可变长度数据类型(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 和 DBCLOB)的 NULL 和零长度数据存储在磁盘上。

如果使用了 VALUE COMPRESSION,那么还可以使用可选 COMPRESS SYSTEM DEFAULT 选项来进一步减少磁盘空间的使用量。 如果插入的或更新的值等于列的数据类型的系统缺省值,那么使用的磁盘空间最少,这是因为,缺省值将不会存储在磁盘上。 支持 COMPRESS SYSTEM DEFAULT 的数据类型包括所有数字类型列、固定长度字符和固定长度图形字符串数据类型。 这表示零和空格可以压缩。

使用值压缩功能时,行中压缩列的字节数可能大于同一列的未压缩版本。 如果行大小接近页大小所允许的最大值,那么必须确保压缩列和未压缩列的字节数之和不超出表空间中该表所允许的行长度。 例如,在页大小为 4 KB 的表空间中,允许的行长度是 4005 字节。 如果超出了可允许行长度,那么会返回错误消息 SQL0670N。 用于确定压缩列和未压缩列的字节数的公式已记录在 CREATE TABLE 语句的文档中。

如果停用值压缩功能:
  • 如果先前已启用 COMPRESS SYSTEM DEFAULTS,那么还将以隐式方式将其停用
  • 未压缩的列可能会导致行大小超出当前表空间的当前页大小所允许的最大值。 如果发生这种情况,那么将返回错误消息 SQL0670N。
  • 现有的已压缩数据将保持处于压缩状态,直到该行被更新或者您使用 REORG 命令来执行表重组为止。