インデックスの格納構造には、BTREE構造があります。ここでは、インデックスの格納構造について、その特徴とその構造に適したデータ処理を示します。
BTREE構造は、インデックスに対する格納構造です。内部的には、木構造のインデックス部とデータ部からなっています。インデックス部は、インデックスのキーと実表データとの対応情報の組の値からなっており、データを格納するページを管理します。インデックス部に対して、データを格納するページからなる部分を、“データ部”と呼びます。
DSO定義のベース表現としてADDRESSが指定された場合は、実表データとの対応情報として表のレコードの格納アドレスが使用されます。
データ部のあるページにデータが収まらない場合は、PRIMEFLEX for HA Databaseが新しいページを切りだし、そのページと元のページとの間でデータを分配して格納します(これをページスプリットと呼びます)。データ部のページスプリットにともなって、インデックス部のページスプリットが行われる場合があります。
インデックスのキーが一意キーでない場合には、1つのインデックスキーの値に対して複数の実表データとの対応情報の値が存在することがあります。また、その重複度(実表データとの対応情報の数)もインデックスのキーの値に依存し一定ではありません。そのため、BTREE構造では、インデックスのキーと実表データとの対応情報を組にして管理します。このキーの組に対して昇順を保証します。さらに、格納効率を良くするため、インデックスのキーの部分を前方圧縮します。
以下に在庫表を例にとってBTREE構造の概略を示します。この例では、倉庫番号の列の上にインデックスが定義され、また表の格納構造はSEQUENTIAL構造であるとします。
図3.22 BTREE構造の概略
データの処理の効率に一番影響のある要因は入出力回数です。BTREE構造の場合は以下の特徴があります。
データ処理で、インデックスのキー値の範囲を指定した場合、または列の組からなるインデックスのキーの上位の列の値だけを指定した場合には、入出力回数はインデックス部の高さに依存します。
それ以外の場合には、当該のインデックスは使用されません。
BTREE構造では、インデックス部とデータ部に対して、それぞれのページ長を独立に指定できます。データ部のページ長はDSO定義のPAGESIZE1オプションで指定します。インデックス部のページ長はPAGESIZE2オプションで指定します。
データ部のページ長およびインデックス部のページ長には、8(キロバイト)を指定します。
インデックスは、1つの実表に対して複数付加することができます。検索の場合には、インデックスの付加によって処理効率を上げることができます。しかし、以下のような場合には、関連するすべてのインデックスのアップグレード処理が行われるため、全体としての処理効率が低下することがあるので注意が必要です。
アプリケーションの処理で、インデックスを付加している列の値または実表データとの対応情報を更新している
アプリケーションの処理で、挿入や削除が主体である