Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


2.3.10 二次インデクス【4V FMB,4V AFM】

4V FMBおよび4V AFMのSDBデータベースに定義する二次インデクス(親子集合型内二次インデクス)について説明します。

二次インデクスは,子レコードの検索や,子レコードを格納する際のレコード挿入位置の検索に使用するインデクスです。SDBデータベースの子レコードの構成要素(一連番号,またはユーザキー)に定義します。

子レコードの数が多い場合,参照するレコード数が増えるため,NEXTポインタまたはPRIORポインタに従って順アクセスすると検索性能が低下するおそれがあります。

このように,NEXTポインタまたはPRIORポインタを使用した順アクセスによる検索では検索性能に問題がある場合は,二次インデクスを使用すると,特定の子レコードに直接アクセスできるので,検索性能を向上できます。

二次インデクスはSDBデータベース格納定義のSECONDARY INDEX句で定義します。

二次インデクスを使用した場合の検索について,NEXTポインタまたはPRIORポインタを使用して順アクセスで検索する場合との違いを次の図に示します。

なお,ポインタを使用した順アクセスによる検索をポインタ検索といいます。

図2‒23 二次インデクスを使用した検索(NEXTポインタまたはPRIORポインタを使用して順アクセスで検索する場合との違い)

[図データ]

二次インデクスが定義された子レコードの検索時や格納時に,二次インデクスを使用するかどうかは,HiRDB/SDが決定します。二次インデクスが使用される検索条件については,「(2) 子レコード検索時の二次インデクスの使用有無」および「(3) 子レコード格納時の二次インデクスの使用有無」を参照してください。

〈この項の構成〉

(1) 二次インデクスの効果が期待できるケース

二次インデクスの効果が期待できるケースについて,子レコードの検索時および子レコードの格納時について,それぞれ説明します。

(a) 子レコードの検索時

子レコードの検索時に二次インデクスの効果が期待できるケースについて,SDBデータベース種別ごとに説明します。

4V FMBのSDBデータベースの場合

子レコード実現値の数が多く,NEXTポインタまたはPRIORポインタを使用した順アクセスによる検索では検索性能に問題がある場合は,二次インデクスを使用することで検索性能を向上できます。

4V AFMのSDBデータベースの場合
  • 子レコード実現値の数が多く,NEXTポインタまたはPRIORポインタを使用した順アクセスによる検索では検索性能に問題がある場合は,二次インデクスを使用することで検索性能を向上できます。

  • NEXTポインタまたはPRIORポインタを使用して順アクセスで検索するときに,検索経路上にほかのトランザクションによって更新された子レコードを格納するページが存在すると,排他処理待ちが発生して同時実行性が低下することがあります。

    更新を含むトランザクションと参照だけのトランザクションを同時に実行するような場合,二次インデクスを使用すると,特定の子レコードに直接アクセスできるので,排他処理待ちの発生を軽減できます。

(b) 子レコードの格納時

4V FMBのSDBデータベースの場合,子レコードの格納時にレコードの挿入位置を検索します。この検索に二次インデクスを使用することで,検索性能を向上できます。また,二次インデクスを使用すると,レコード数やレコードの格納位置に依存しないでレコード挿入位置を検索できるので,子レコード格納時の性能が一定になります。子レコード格納時のレコード挿入位置の検索については,「2.5.7(2) レコードの格納順序」を参照してください。

なお,二次インデクスが定義されていると,子レコード格納時にインデクスも更新されます。

(2) 子レコード検索時の二次インデクスの使用有無

子レコード検索時に二次インデクスを使用するかどうかは,親子集合位置指示子が指すレコードの一連番号またはユーザキーと,検索条件からHiRDB/SDが決定します。

なお,4V FMBのSDBデータベースでは,先頭のレコード(FIRSTポインタ)または最後のレコード(LASTポインタ)を基点とする検索の場合(SDBデータベースを操作するAPIの指示コードが'F'または'L'の場合)だけ二次インデクスが使用され,そのほかの検索では二次インデクスは使用されません(NEXTポインタまたはPRIORポインタを使用した順アクセスで検索されます)。

また,4V AFMのSDBデータベースでは,ユーザが指定した検索条件以外にも,検索範囲を絞り込める場合に,二次インデクスが使用されることがあります。

親子集合位置指示子については,「2.5.3 位置指示子」を参照してください。また,レコードの検索については,「2.5.4 レコードの検索【4V FMB,4V AFM】」を参照してください。

レコード検索時の二次インデクスの使用有無を次の表に示します。

表2‒9 レコード検索時の二次インデクスの使用有無

項番

SDBデータベース種別

指示コード

検索条件※1

検索条件の有効/無効※3

二次インデクスの使用

1

4V FMB

F/L※2

あり

有効

2

無効

×

3

なし

4

上記以外

5

4V AFM

F/L/N/P

あり

有効

6

無効

×

7

なし

8

上記以外

(凡例)

F:先頭のレコード(親レコードのFIRSTポインタが指すレコード)を基点に,NEXTポインタに従って検索します。

N:位置づけされているレコードの次のレコード(NEXTポインタが指すレコード)を基点に,NEXTポインタに従って検索します。

L:最後のレコード(親レコードのLASTポインタが指すレコード)を基点に,PRIORポインタに従って検索します。

P:位置づけされているレコードの1つ前のレコード(PRIORポインタが指すレコード)を基点に,PRIORポインタに従って検索します。

○:二次インデクスが使用されます。

×:二次インデクスは使用されません。

−:該当しません。

注※1

二次インデクスの定義に指定した一連番号またはユーザキーを検索条件に指定している場合を「あり」,指定していない場合を「なし」とします。

注※2

親子集合位置指示子が位置づけられていない状態で,指示コード'N',または'P'を指定して検索した場合も該当します。レコードの位置づけについては,「2.5.3(1) レコードの位置づけ」を参照してください。

注※3

指定した検索条件が次に示す(a)〜(c)のどれかに該当する場合を「有効」,どれにも該当しない場合を「無効」とします。

次に示す(a)〜(c)のどれかに該当する場合,二次インデクスが使用されます。

(a) '='条件が指定されている場合

(b) 検索範囲に親子集合位置指示子が指すレコードが含まれない場合

(c) 検索範囲の基点を絞り込む条件が存在する場合

それぞれの検索条件の詳細について次に示します。

(a) '='条件が指定されている場合

二次インデクスのキーを構成する一連番号またはユーザキーに対して,'='条件が指定されている場合,二次インデクスが使用されます。

'='条件が指定されている場合に,二次インデクスが使用される例を次の図に示します。

[図データ]

(b) 検索範囲に親子集合位置指示子が指すレコードが含まれない場合

4V AFMのSDBデータベースの場合,NEXTポインタまたはPRIORポインタに従って順アクセスする際に(SDBデータベースを操作するAPIの指示コードが'N'または'P'の場合に),二次インデクスの構成要素の一連番号またはユーザキーに対する条件によって決定される検索範囲に,親子集合位置指示子が指すレコードが含まれていなければ,二次インデクスが使用されます。

検索範囲に親子集合位置指示子が指すレコードが含まれないときに,二次インデクスが使用される例を次の図に示します。

[図データ]

(c) 検索範囲の基点を絞り込む条件が存在する場合

先頭のレコード(FIRSTポインタ)または最後のレコード(LASTポインタ)を基点とする検索の場合(SDBデータベースを操作するAPIの指示コードが'F'または'L'の場合),二次インデクスの構成要素の一連番号またはユーザキーに対する検索範囲の基点を絞り込む条件が存在すると,二次インデクスが使用されます。

二次インデクスの構成要素の一連番号またはユーザキーに対する検索範囲の基点を絞り込む条件が存在する場合に,二次インデクスが使用される例を次の図に示します。

[図データ]

(3) 子レコード格納時の二次インデクスの使用有無

次に示す条件をすべて満たしている場合,子レコード格納時のレコード挿入位置の検索に,二次インデクスが使用されます。

二次インデクスを使用したレコード挿入位置の検索について,二次インデクスを使用しない場合と比較した例を次に示します。

二次インデクスを使用したレコード挿入位置の検索の例

ユーザキーの値が3であるレコードを格納するとします。

上記の条件を満たしていれば,二次インデクスを使用してレコードの挿入位置(格納するレコードのPRIORポインタに接続されるレコード)が検索されます。二次インデクスを使用することで,検索範囲を絞り込むことができるため,効率的にレコードの挿入位置が検索されます。

なお,上記の条件を満たしていない場合は,挿入位置が見つかるまでNEXTポインタまたはPRIORポインタを使用して順アクセスします。このため,レコードの挿入位置によって検索性能に差が出ます。

図2‒24 二次インデクスを使用したレコード挿入位置の検索の例

[図データ]

(4) 二次インデクスの使用有無の確認

HiRDB/SDが二次インデクスを使用して検索したかどうかは,次の方法で確認できます。

UAP統計レポートについては,「16.5.5 UAP統計レポート機能」を参照してください。また,SDBデータベースへのアクセス時に使用するインタフェースエリアについては,マニュアル「TP1/Financial Service Platform 使用の手引」の「SDBハンドラ機能」の「インタフェースエリア構造」を参照してください。

(5) 二次インデクスに関する留意事項