索引圧縮
宣言済み一時表または作成済み一時表の索引を含む索引は、ストレージ・コストを削減するために圧縮できます。 これは、大規模な OLTP およびデータウェアハウス環境で特に役立ちます。
デフォルトでは、索引圧縮は圧縮済みの表には有効で、非圧縮の表には無効になっています。 このデフォルトの動作は、CREATE INDEX ステートメントの COMPRESS YES オプションを使用してオーバーライドできます。 既存の索引を処理する場合、ALTER INDEX ステートメントを使用して索引圧縮を有効または無効にし、 索引の再編成を実行して索引を再作成する必要があります。
- ブロック索引
- XML パス索引
- SPECIFICATION ONLY 指定の索引は圧縮できません。
- 一時表の索引の圧縮属性は、ALTER INDEX コマンドでは変更できません。
索引圧縮が有効になっている場合、索引ページのオン・ディスク・フォーマットおよびメモリー・フォーマットは、ストレージ・スペースを最小化するためにデータベース・マネージャーによって選択された圧縮アルゴリズムに基づいて変更されます。 得られる圧縮の度合いは、作成している索引のタイプ、および索引に含まれるデータによって異なります。 例えば、データベース・マネージャーは、重複キーのレコード ID (RID) の省略形式を保管することで、大量の重複キーがある索引を圧縮できます。 索引キーの接頭部の共通性の度合いが高い索引では、データベース・マネージャーは、索引キーの接頭部の類似性に基づき圧縮を適用できます。
圧縮に関連する制限やトレードオフもあります。 索引が共通の索引列値または部分的に共通な接頭部を共有していない場合、ストレージの削減という点での索引圧縮の効果はごくわずかです。 タイム・スタンプ列のユニーク索引の場合、同じリーフ・ページに年、月、日、時間、分、さらには秒まで共通の値が指定されていることがあるため、大幅に圧縮できる可能性がありますが、共通の接頭部が存在するかどうかを調べることはパフォーマンス低下の原因となります。
特定の状況において、圧縮するメリットがないと考える場合は、圧縮せずに索引を再作成するか、索引を変更して索引の再編成を行い、索引圧縮を無効にできます。
- CREATE TABLE コマンドまたは ALTER TABLE コマンドで COMPRESS YES オプションを使用して行圧縮を有効にした場合、デフォルトでは、その後その表に作成される、圧縮がサポートされているすべての索引で圧縮が有効になります。ただし、CREATE INDEX コマンドまたは ALTER INDEX コマンドを使用して明示的に無効にている索引は除きます。 同様に、CREATE TABLE または ALTER TABLE コマンドを使用して行圧縮を無効する場合、その後その表に作成されるすべての索引で索引圧縮が無効になります。ただし、CREATE INDEX または ALTER INDEX コマンドを使用して明示的に有効にしている索引は除きます。
- ALTER INDEX コマンドを使用して索引圧縮を有効にする場合、索引の再編成を実行するまで圧縮は実行されません。 同様に、圧縮を無効にする場合、索引を再編成を実行するまで索引は圧縮されたままです。
- データベースのマイグレーション中は、マイグレーション対象の索引に対して圧縮は有効になりません。 圧縮を使用する場合は、ALTER INDEX コマンドを使用して、索引の再編成を実行する必要があります。
- CPU の使用量は、索引の圧縮または圧縮解除に必要な処理によって多少増加することがあります。 この値が許容できない値の場合は、新規索引または既存索引の索引圧縮を無効にできます。
例
例 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: 圧縮索引を再編成する必要があるかどうかを判別します。
例 3: 索引圧縮で節約される可能性があるスペース量を判別します。
索引圧縮で節約される可能性があるスペース量を計算する方法の例については、ADMIN_GET_INDEX_COMPRESS_INFO 表関数の資料を参照してください。