技术开发 频道

DB2 V9表压缩


对表启用空值、系统缺省值压缩 

    除了数据行压缩以外,以前的空值压缩在DB2 V9中继续可以使用。创建表时,可使用可选 VALUE COMRESSION 子句来指定表在使用表级别也可能是列级别的节省空间的行格式。使用 VALUE COMRESSION 时,不会将已指定给已定义的变长数据类型(VARCHAR、VARGRAPHICS、LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 和 DBCLOB)的 NULL 和零长度数据存储在磁盘上。只有与这些数据类型相关联的开销值才会占用磁盘空间。如果使用了VALUE COMRESSION,那么还可以使用可选 COMPRSS SYSTEM DEFAULT 选项来进一步减少磁盘空间的使用量。如果插入的或更新的值等于列的数据类型的系统缺省值,那么使用的磁盘空间最少。缺省值将不会存储在磁盘上。支持COMPRSS SYSTEM DEFAULT的数据类型包括所有数字类型列、定长字符和定长图形字符串数据类型。这表示零和空格可以压缩。要确定是否应考虑对表进行空间压缩,应了解大多数值等于系统缺省值或 NULL 值的表将受益于新的行格式。例如,假设有一个 INTEGER 列且列的 90% 的列值为 0 (INTEGER数据类型的缺省值)或 NULL,压缩此表和此列将受益于新的行格式并节省大量的磁盘空间。 

    下面我们创建示例表TEST3,其使用VALUE COMRESSION对整个表的空值进行压缩,对每个列使用COMPRESS SYSTEM DEFAULT选项对数据类型默认的系统缺省值进行压缩。 

    在DB2CLP窗口连上示例数据库,发出CREATE TABLE命令创建示例表TEST3,并插入部分数据,具体如清单22所示:
- -清单22 .创建示例表TEST3 C:\> db2 connect to db2test1 数据库连接信息 数据库服务器 = DB2 / NT 9.1.0 SQL 授权标识 = RHETTE 本地数据库别名 = DB2TEST1 C:\> DB2 CREATE TABLE TEST3 ( ID INTEGER COMPRESS SYSTEM DEFAULT , NAME VARCHAR ( 10 ) COMPRESS SYSTEM DEFAULT , NOTE VARCHAR ( 100 ) COMPRESS SYSTEM DEFAULT ) IN TABLESPACE1 VALUE COMPRESSION DB20000I SQL命令成功完成。 C:\> db2 insert into test3 ( id , name ) values ( 0 , ' aa ') DB20000I SQL命令成功完成。 C:\> db2 insert into test3 ( id , name ) values ( 1 , ' bb ') DB20000I SQL命令成功完成。

    命令成功完成,这样我们就创建了示例表TEST3,其使用空值和默认值压缩。 

    COMPRESS SYSTEM DEFAULT指定对系统默认值存储时使用最小空间,如果VALUE COMRESSION子句没有被指定,将返回一个警告SQLSTATE01648,并且系统默认值也不会在压缩存储。允许系统默认值压缩将对INSERT和UPDATE操作额外增加一些性能开支,因为需要额外检查是否需要默认值压缩。COMPRESS SYSTEM DEFAULT子句不支持DATE,TIME,TIMESTAMP,XML或者结构化数据类型,否则会报SQLSTATE 42842错误。如果基本数据类型是变长字符串,则本语句将自动忽略。 

    可以使用 DEACTIVATE VALUE COMPRESSION 来指定表将不再对表中数据使用节省空间技术。如果使用DEACTIVATE VALUE COMPRESSION,这将显式禁用与该表中的列相关联的所有 COMPRESS SYSTEM DEFAULT 选项。 

    下面我们对示例表TEST3的ID列禁用系统默认值压缩,在DB2CLP窗口中,发出带COMPRESS OFF选项的ALTER TABLE命令,具体如清单23所示:

- -清单23 .对示例表TEST3一个列禁用系统默认值压缩 C:\> DB2 ALTER TABLE TEST3 ALTER COLUMN ID COMPRESS OFF DB20000I SQL命令成功完成。

    下面我们对示例表TEST3使用 DEACTIVATE VALUE COMPRESSION 来指定表将不再对表中数据使用节省空间技术,其各个列上的COMPRESS SYSTEM DEFAULT也将同时禁用。
在DB2CLP窗口中发出DEACTIVATE VALUE COMPRESSION命令,具体如清单24所示:

- -清单24 .对示例表TEST3禁用空间节省技术 C:\> DB2 ALTER TABLE TEST3 DEACTIVATE VALUE COMPRESSION DB20000I SQL命令成功完成。

    如果想对没有启用空值压缩的旧表启用空值压缩,可以是带ACTIVATE VALUE COMPRESSION选项的ALTER TABLE命令显式地启用空值压缩,比如我们对示例表TEST3还想启用空值压缩,可以在DB2CLP窗口中发出ALTER TABLE命令,具体如清单25所示:

- - 清单25 .对示例表TEST3启用空值压缩 C:\> DB2 ALTER TABLE test3 ACTIVATE VALUE COMPRESSION DB20000I SQL命令成功完成。

    如果对某个列想启用系统默认值压缩,可以在DB2CLP窗口中发出ALTER TABLE命令,具体如清单26所示:

- - 清单26 .对示例表TEST3启用系统默认值压缩 C:\> DB2 ALTER TABLE test3 ALTER id COMPRESS SYSTEM DEFAULT DB20000I SQL命令成功完成。

 

0
相关文章