DB2 V9.7 for Linux, UNIX, and Windows

索引压缩

可以压缩索引(包括已声明的临时表或者已创建的临时表的索引),以便降低存储器开销。对于大型 OLTP 和数据仓库环境而言,此功能特别有用。

缺省情况下,索引压缩功能对于已压缩的表处于启用状态,对于未压缩的表处于禁用状态。您可以使用 CREATE INDEX 语句的 COMPRESS YES 选项来更改此缺省行为。处理现有索引时,使用 ALTER INDEX 语句来启用或禁用索引压缩;然后必须执行索引重组以重建索引。

限制: 下列类型的索引不支持索引压缩功能:
另外:
  • 不能对索引规范进行压缩。
  • 无法使用 ALTER INDEX 命令对临时表的索引更改压缩属性。

启用索引压缩功能后,将根据数据库管理器所选择的压缩算法对索引页在磁盘上和内存中的格式进行修改,以便最大程度地减少存储空间耗用量。根据所创建索引类型以及索引所包含数据的不同,实现的压缩程度也会有所变化。例如,通过存储重复键的记录标识 (RID) 的缩写格式,数据库管理器可以对包含大量重复键的索引进行压缩。在索引键前缀的公共程度很高的索引中,数据库管理器可以根据索引键前缀的相似性来进行压缩。

存在一些与压缩相关联的限制和权衡。如果索引未共享公共索引列值或者不完整的公共前缀,那么索引压缩在减少耗用存储量方面的优势可以忽略不计。并且,尽管时间戳记列的唯一索引可能由于同一个叶子页包含年、月、日、小时、分钟甚至秒的公共值而具有非常高的压缩能力,但检查是否存在公共前缀的开销也会导致性能下降。

如果您相信压缩不会对您所处的特定情况带来好处,那么可以在不进行压缩的情况下重新创建索引,也可以更改索引并接着执行索引重组以禁用索引压缩功能。

在考虑使用索引压缩功能时,您应该记住下列事项:

示例

示例 1:检查索引是否处于压缩状态。

下面这两个语句将创建支持压缩功能的新表 T1 并对 T1 创建索引 I1。
  CREATE TABLE T1 (C1 INT, C2 INT, C3 INT) COMPRESS YES
  CREATE INDEX I1 ON T1(C1) 
缺省情况下,T1 的索引处于压缩状态。可以使用目录表或管理表函数来检查索引 T1 的压缩属性,此属性将指示是否已启用压缩功能:
 SELECT COMPRESSION FROM SYSCAT.INDEXES WHERE TABNAME='T1'
 
 COMPRESSION
 -----------
 Y

    1 record(s) selected.

示例 2:确定已压缩的索引是否要求进行重组。

要确定已压缩的索引是否要求进行重组,请使用 REORGCHK 命令。图 1 显示如何对名为 T1 的表运行此命令:
图 1. REORGCHK 命令的输出
REORGCHK ON TABLE SCHEMA1.T1

Doing RUNSTATS ....


Table statistics:

F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Effective Space Utilization of Data Pages) > 70
F3: 100 * (Required Pages / Total Pages) > 80

SCHEMA.NAME                     CARD     OV     NP     FP ACTBLK    TSIZE  F1  F2  F3 REORG
----------------------------------------------------------------------------------------
Table: SCHEMA1.T1
                                 879      0     14     14      -    51861   0 100 100 ---
----------------------------------------------------------------------------------------

Index statistics:

F4: CLUSTERRATIO or normalized CLUSTERFACTOR > 80
F5: 100 * (Space used on leaf pages / Space available on non-empty leaf pages) > MIN(50, (100 - PCTFREE))
F6: (100 - PCTFREE) * (Amount of space available in an index with one less level / Amount of space required for all keys) < 100
F7: 100 * (Number of pseudo-deleted RIDs / Total number of RIDs) < 20
F8: 100 * (Number of pseudo-empty leaf pages / Total number of leaf pages) < 20

SCHEMA.NAME                 INDCARD  LEAF ELEAF LVLS  NDEL    KEYS LEAF_RECSIZE NLEAF_RECSIZE LEAF_PAGE_OVERHEAD NLEAF_PAGE_OVERHEAD  PCT_PAGES_SAVED  F4  F5  F6  F7  F8 REORG
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Table: SCHEMA1.T1
Index: SCHEMA1.I1
                                879    15     0    2     0     682           20            20                596                 596               28  56  31   -   0   0 -----
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

示例 3:确定索引压缩功能有可能节省的空间量。

要获取有关 如何计算索引压缩功能有可能节省的空间量的示例,请参阅 ADMIN_GET_INDEX_COMPRESS_INFO 表函数的文档。