实际上DB2表压缩的方法是通过查看整个表,找到重复的字符和字符串后,将那些字符和字符串存储在一个压缩字典中,然后用一个存储在字典中对应数据字符串的替代符号来替代表中的实际数据,从而达到了压缩数据的目的。一个压缩属性的表,肯定有他所对应的压缩字典。
开启表的压缩功能: create table tableName compress yes 或 alter table tableName compress yes 扫描表并创建对应的压缩字典,并执行实际的表重组,从而压缩数据(表中需要有数据,不能是空表,每个表都有自己的压缩字典,新插入的数据也会继续被压缩):注意此时REORG使用的是RESETDICTIONARY选项 reorg table tableName resetdictionary 对于压缩后的表,如果想进行一次表重组,而不是重建数据字典,那么:注意此时REORG使用的是KEEPDICTIONARY选项 reorg table tableName keepdictionary
在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用db2 inspect和db2inspf命令来实现: 通过INSPECT ROWCOMPESTIMATE语句进行评估分析?记住,这个命令只是估计压缩的效果,而不是查看最终实际的压缩效果,如果想查看实际的压缩效果,需要查看系统表SYSIBM.SYSTABLES?带压缩估计选项(ROWCOMPESTIMATE)的INSPECT命令,将生成一份报告,描述节省了多少页?语法如下: 最后打开文件output_file_name就可以看到压缩比例了 结果实例如下: - - 清单12 .查看示例表TEST1,看一下表压缩方式节省了多少空间
如果我们对压缩结果不满意,现在想对示例表TEST1进行解压缩,可以发出ALTER TABLE命令,把示例表TEST1的COMPRESS属性设置为NO,再运行REORG命令执行脱机重组,具体如下: db2 alter table tablenam compress no; db2 reorg table tablenam resetdictionary;
除了数据行压缩以外,以前的空值压缩在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 值的表将受益于新的行格式 (关闭开启)空值压缩 db2 alter table tablenam (de)activatevalue compress (关闭开启)系统默认压缩 db2 alter table tablenam (de)activate compress system default 或者在定义的表格的时候:db2 create table tablenam value compress
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实际上DB2表压缩的方法是通过查看整个表,找到重复的字符和字符串后,将那些字符和字符串存储在一个压缩字典中,然后用一个存储在字典中对应数据字符串的替代符号来替代表中的实际数据,从而达到了压缩数据的目的。一个压缩属性的表,肯定有他所对应的压缩字典。 开启表的压缩功能:
扫描表并创建对应的压缩字典,并执行实际的表重组,从而压缩数据(每个表都有自己的压缩字典,新插入的数据也会继续被压缩):
对于压缩后的表,如果想进行一次表重组,而不是重建数据字典,那么:
在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用db2 inspect和db2inspf命令来实现:
reorg table aa; |
|
来自: java程序员879 > 《DB2》