您可以通过使用内置在 DB2 for Linux, UNIX and Windows 数据库中的压缩功能来减少表、索引和备份映像的大小,从而减少数据所需的存储量。 表和索引通常包含重复信息。这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模
您可以通过使用内置在 DB2 for Linux, UNIX and Windows 中的压缩功能来减少表、索引和备份映像的大小,从而减少数据所需的存储量。 表和索引通常包含重复信息。这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模式。压缩方法可以使用短字符串或符号来代替重复的信息。 您可以使用一些压缩功能来减少存储表和索引功能所需的空间,同时也可以采用一些功能来确定压缩可以提供的节省。您还可以使用备份压缩来减少备份的大小。 DB2 Version 9.7 的大多数版本中都包含的压缩功能包括:
 值压缩
 备份压缩
以下额外的压缩功能与 DB2 存储优化特性的许可是一起提供的:
 行压缩,包括 XML 存储对象的压缩
 临时表压缩
 压缩的暂时或永久表上的索引压缩
行压缩
行压缩,有时也被称为静态压缩,它用较短的符号字符串替换在各行中重复的值模式,从而压缩数据行。 使用行压缩的主要好处是,您可以在更小的空间中存储数据,可以产生显著的存储成本节省。此外,因为您以较慢的速度使用存储,所以可以推迟额外存储空间的未来支出。 除了节省成本之外,行压缩还可以提高性能。对压缩数据的许多查询可以用更少的 I/O 操作来执行,因为每次从磁盘读取都会带来更多数据。同样,可以将更多数据缓存在缓冲池中,这会增加缓冲池命中率。然而,这里有一个权衡要考虑,数据压缩和解压需要使用额外的CPU周期。 一个表要为行压缩做好准备,有两个要求:
 您必须使用 COMPRESS YES 子句创建或修改一个表,使该表具有使用压缩功能的资格。
 您必须从将要压缩的表中建立一个值或符号的字典。根据您所使用的 DB2 数据库产品的版本,建立压缩字典的手段会有所不同。
在这两个要求得到满足后,就可以压缩在表中插入或更新的数据了。
以下是在表和索引中启用行压缩的一个简单示例:
CREATE TABLE T1 (C1 INT, C2 INT, C3 INT) COMPRESS YES
CREATE INDEX I1 ON T1(C1)
SELECT COMPRESSION FROM SYSCAT.INDEXES WHERE TABNAME=’T1’
COMPRESSION
-----------
Y
1 record(s) selected.
行压缩的良好候选者
检查您的数据库,确定数据库内的哪些表可能是压缩的候选者。最初,启用数据压缩是为了在现有的未压缩表上节省存储。稍后,数据压缩可以帮助您优化未来的存储增长。在数据库现有的表和/或预期随着时间的推移增长得更快的表中,可能会发现一些存储“难题”。
很明显,最大的表是行压缩的候选者,但千万不要忽视较小的表。如果您有数百或数千个较小的表,您可能会受益于压缩许多较小的表的聚合效果。大和小在这里是相对的。数据库的设计就决定着包含一百万或几百万个行的表是大还是小。
几百 KB 以下的小表不是良好的行压缩的候选者,因为可以实现的空间节省并不足以抵消数据压缩字典的存储需求。小表的字典大小约为 100 KB,存储在物理表数据对象中。作为一个经验法则,应该考虑压缩大小为 2 MB 或以上的小表。
只读表是非常好的压缩候选者。如果表中只有少量更新,那么该表可能是一个很好的候选者。如果某个表有大量的更新,那么该表可能不是压缩的良好候选者。读/写比例为 70/30 或更高的表是优秀的压缩候选者。 试图压缩这些表之前,先将大表分隔到它们自己的表空间中。