可以压缩索引(包括已声明的临时表或者已创建的临时表的索引),以便降低存储器开销。对于大型 OLTP 和数据仓库环境而言,此功能特别有用。
缺省情况下,索引压缩功能对于已压缩的表处于启用状态,对于未压缩的表处于禁用状态。您可以使用 CREATE INDEX 语句的 COMPRESS YES 选项来更改此缺省行为。处理现有索引时,使用 ALTER INDEX 语句来启用或禁用索引压缩;然后必须执行索引重组以重建索引。
启用索引压缩功能后,将根据数据库管理器所选择的压缩算法对索引页在磁盘上和内存中的格式进行修改,以便最大程度地减少存储空间耗用量。根据所创建索引类型以及索引所包含数据的不同,实现的压缩程度也会有所变化。例如,通过存储重复键的记录标识 (RID) 的缩写格式,数据库管理器可以对包含大量重复键的索引进行压缩。在索引键前缀的公共程度很高的索引中,数据库管理器可以根据索引键前缀的相似性来进行压缩。
存在一些与压缩相关联的限制和权衡。如果索引未共享公共索引列值或者不完整的公共前缀,那么索引压缩在减少耗用存储量方面的优势可以忽略不计。并且,尽管时间戳记列的唯一索引可能由于同一个叶子页包含年、月、日、小时、分钟甚至秒的公共值而具有非常高的压缩能力,但检查是否存在公共前缀的开销也会导致性能下降。
如果您相信压缩不会对您所处的特定情况带来好处,那么可以在不进行压缩的情况下重新创建索引,也可以更改索引并接着执行索引重组以禁用索引压缩功能。
示例 1:检查索引是否处于压缩状态。
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.
示例 2:确定已压缩的索引是否要求进行重组。
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 表函数的文档。