DB2 V10.1 for Linux, UNIX, and Windows

创建表级别压缩字典

可对启用了自适应压缩或经典行压缩的表自动或手动构建表级别压缩字典。您启用了自适应压缩的表包括页级别数据字典,这些字典始终是自动创建的。

自动创建字典

从 DB2® V9.5 开始,如果满足下面的每个条件,那么将自动创建表级别压缩字典:
  • 通过使用带 COMPRESS YES ADAPTIVE 或 COMPRESS YES STATIC 子句的 CREATE TABLE 或 ALTER TABLE 语句为该表设置 COMPRESS 属性。
  • 该表尚不存在表级别压缩字典。
  • 该表包含足够数据以构造重复数据的字典。
如果压缩保持已启用状态,那么系统会使用该字典压缩创建该字典后移至表的数据。
下图显示了自动创建压缩字典的过程:
自动创建字典
图中显示的事件顺序如下所示:
  1. 尚未创建压缩字典,因为表为空。
  2. 数据插入到表中(通过使用插入或装入操作)并保持未压缩状态。
  3. 随着更多数据插入或装入到表中,数据保持未压缩状态。
  4. 如果 COMPRESS 属性设为 YES ADAPTIVE 或 YES STATIC,那么达到阈值后系统会自动触发字典创建。
  5. 创建了字典。
  6. 已将字典追加至表。
  7. 从此时开始,系统会启用表级别压缩,并且后续插入或添加的行将由表级别压缩字典压缩。
要点: 创建该字典前表中存在的行将保持未压缩状态,除非您更改这些行或手动重建该字典。
如果使用 DB2 V9.7 或更高版本创建表,并且该表包含类型为 XML 的至少一列,那么系统会创建另一压缩字典。此字典用于压缩存储在与该表相关联的缺省 XML 存储器对象中的 XML 数据。如果符合下列每个条件,那么系统会自动为 XML 数据创建压缩字典:
  • 您将表的 COMPRESS 属性设为 YES ADAPTIVE 或 YES STATIC。
  • 该 XML 存储器对象中不存在压缩字典。
  • XML 存储器对象中有足够的数据。
限制: 不能压缩您使用 DB2 V9.5 或 DB2 V9.1 创建的 XML 列中的数据。但是,可压缩您使用 DB2 V9.7 或更高版本添加至表的直接插入 XML 列,只要在该产品的先前发行版中创建的该表没有 XML 列。如果您在先前发行版中创建的表已有一个或多个 XML 列并且您想要通过使用 DB2 V9.7 或更高版本添加已压缩 XML 列,那么必须使用 ADMIN_MOVE_TABLE 存储过程来迁移该表,才能使用压缩。

用于为临时表创建表级别压缩字典的机制与用于永久表的机制类似。但是,数据库管理器将根据诸如查询复杂程度和结果集大小之类的因素来自动确定是否对临时表使用经典行压缩。

手动创建字典

尽管启用了压缩的表增大到足够大小时就会自动创建字典,但如果不存在压缩字典,那么您也可以强制创建表级别压缩字典(通过使用带有 RESETDICTIONARY 参数的 REORG TABLE 命令)。如果表中至少有一行数据,那么此命令将强制创建压缩字典。对表进行重组是一项脱机操作;使用“自动创建字典”这项功能的一个好处就是,构建字典时,表仍然处于联机状态。

您还可以使用带有 ROWCOMPESTIMATE 参数的 INSPECT 命令创建新字典,而不是使用 REORG TABLE 命令来强制创建新字典。如果表没有字典,那么此命令就会创建压缩字典。与执行表重组相比,使用此方法的优点在于,创建字典时该表仍然保持联机状态。系统将压缩您后续添加的行;但不会压缩在运行 INSPECT 命令之前就已存在的行,直到您执行表重组。但是,如果启用压缩,那么激活压缩后通常很快自动创建字典,就像您以前有机会使用 INSPECT 命令一样。

重置压缩字典

无论是自动还是手动创建表级别压缩字典,字典均为静态;在构建之后也不会更改。添加或更新行时,将根据压缩字典中存在的数据来压缩这些行。此行为在许多情况下都存在。例如,考虑数据库中用于维护城市自来水公司客户帐户的表。这样一个表中可能有 STREET_ADDRESS、CITY、PROVINCE、TELEPHONE_NUM、POSTAL_CODE 和 ACCOUNT_TYPE 等列。如果使用这类表中的数据构建了压缩字典,那么即使它只是中等大小的表,也可能存在足够多的重复信息,因此对它进行经典行压缩将节省大量空间。这是因为不同客户之间可能有许多公共数据,例如 CITY、POSTAL_CODE 和 PROVINCE 列的值或 STREET_ADDRSS 或 TELEPHONE_NUM 列的值的某些部分。

但是,其他表可能会随时间推移而显著更改。考虑用于零售数据的表,如下所示:
  • 主表用于按月累积数据。
  • 每个月,会将一组新记录装入到表中。
在这种情况下,在某个月份(例如,四月)创建的压缩字典可能不会反映当年后续时间的重复销售数据。在表中数据随时间推移而显著更改的情况下,您可能希望使用带有 RESETDICTIONARY 参数的 REORG TABLE 命令来重置压缩字典。重置压缩字典的优点是,构建该字典时会考虑整个表中的数据。