值压缩针对数据的表示以及数据库管理系统内部用来存储数据的存储器结构来优化空间使用情况。值压缩涉及除去一个值的重复条目,仅存储一个副本。存储的副本记录对存储值的任何引用的位置。
创建表时,可使用 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 语句的文档中。