Ims-db-secondary-indexing

提供:Dev Guides
移動先:案内検索

IMS DB-二次索引付け

完全な連結キーを使用せずにデータベースにアクセスする場合、またはシーケンスのプライマリフィールドを使用しない場合は、セカンダリインデックスが使用されます。

インデックスポインターセグメント

DL/Iは、インデックス付きデータベースのセグメントへのポインターを別のデータベースに保存します。 インデックスポインタセグメントは、セカンダリインデックスの唯一のタイプです。 それは2つの部分で構成されています-

  • プレフィックス要素
  • {ブランク}
  • データ要素

プレフィックス要素

インデックスポインターセグメントのプレフィックス部分には、インデックスターゲットセグメントへのポインターが含まれます。 インデックスターゲットセグメントは、セカンダリインデックスを使用してアクセス可能なセグメントです。

データ要素

データ要素には、インデックスが作成されるインデックス付きデータベースのセグメントのキー値が含まれます。 これは、インデックスソースセグメントとも呼ばれます。

セカンダリインデックス作成に関する注意事項は次のとおりです-

  • インデックスソースセグメントとターゲットソースセグメントは同じである必要はありません。
  • セカンダリインデックスを設定すると、DL/Iによって自動的に維持されます。
  • DBAは、複数のアクセスパスごとに多くのセカンダリインデックスを定義します。 これらのセカンダリインデックスは、別のインデックスデータベースに格納されます。
  • セカンダリインデックスはDL/Iに追加の処理オーバーヘッドを課すため、これ以上作成しないでください。

二次キー

注意点-

  • セカンダリインデックスが構築されるインデックスソースセグメントのフィールドは、セカンダリキーと呼ばれます。
  • 任意のフィールドをセカンダリキーとして使用できます。 セグメントシーケンスフィールドである必要はありません。
  • セカンダリキーは、インデックスソースセグメント内の単一フィールドの任意の組み合わせにすることができます。
  • セカンダリキーの値は一意である必要はありません。

二次データ構造

注意点-

  • セカンダリインデックスを作成すると、データベースの見かけの階層構造も変更されます。
  • インデックスターゲットセグメントが見かけのルートセグメントになります。 次の図に示すように、エンジニアリングセグメントは、たとえルートセグメントでなくてもルートセグメントになります。
  • セカンダリインデックスによって引き起こされるデータベース構造の再配置は、セカンダリデータ構造として知られています。
  • セカンダリデータ構造は、ディスク上に存在するメインの物理データベース構造を変更しません。 これは、アプリケーションプログラムの前にあるデータベース構造を変更する方法にすぎません。

セカンダリデータ構造

独立したAND演算子

注意点-

  • AND(*または&)演算子をセカンダリインデックスで使用する場合、依存AND演算子と呼ばれます。
  • 独立したAND(#)を使用すると、依存ANDでは不可能な資格を指定できます。
  • この演算子は、インデックスソースセグメントがインデックスターゲットセグメントに依存しているセカンダリインデックスにのみ使用できます。
  • 独立したANDでSSAをコーディングして、2つ以上の依存ソースセグメントのフィールドに基づいてターゲットセグメントのオカレンスを処理するように指定できます。
01 ITEM-SELECTION-SSA.
   05 FILLER           PIC X(8).
   05 FILLER           PIC X(1) VALUE '('.
   05 FILLER           PIC X(10).
   05 SSA-KEY-1        PIC X(8).
   05 FILLER           PIC X   VALUE '#'.
   05 FILLER           PIC X(10).
   05 SSA-KEY-2        PIC X(8).
   05 FILLER           PIC X   VALUE ')'.

スパースシーケンス

注意点-

  • スパースシーケンスは、スパースインデックス処理とも呼ばれます。 セカンダリインデックスデータベースを使用したスパースシーケンスを使用して、インデックスソースセグメントの一部をインデックスから削除できます。
  • スパースシーケンスは、パフォーマンスを向上させるために使用されます。 インデックスソースセグメントの一部のオカレンスが使用されない場合、それを削除できます。
  • DL/Iは、抑制値または抑制ルーチン、あるいはその両方を使用して、セグメントにインデックスを付けるかどうかを決定します。
  • インデックスソースセグメントのシーケンスフィールドの値が抑制値と一致する場合、インデックス関係は確立されません。
  • 抑制ルーチンは、セグメントを評価し、インデックスを作成するかどうかを決定するユーザー作成プログラムです。
  • 疎索引付けが使用される場合、その機能はDL/Iによって処理されます。 アプリケーションプログラムで特別な準備をする必要はありません。

DBDGEN要件

前のモジュールで説明したように、DBDGENはDBDの作成に使用されます。 セカンダリインデックスを作成する場合、2つのデータベースが関係します。 DBAは、インデックス付きデータベースとセカンダリインデックス付きデータベースの間の関係を作成するために、2つのDBDGENを使用して2つのDBDを作成する必要があります。

PSBGENの要件

データベースのセカンダリインデックスを作成した後、DBAはPSBを作成する必要があります。 プログラムのPSBGENは、PSBマクロのPROCSEQパラメーターでデータベースの適切な処理シーケンスを指定します。 PROCSEQパラメーターの場合、DBAは2次索引データベースのDBD名をコーディングします。