Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.3.1 SQL文の実行時にレンジインデクスが使用される条件

表にレンジインデクスが定義されている場合,WHERE句に指定された探索条件,結合表のON 探索条件,およびSQL文の実行時に使用されるB-treeインデクスまたはテキストインデクスによって,SQL文の実行時にレンジインデクスが使用されるかどうかが決まります。

ここでは,チャンクのスキップに使用するレンジインデクスの決定方法と,セグメントのスキップに使用するレンジインデクスの決定方法について説明します。

留意事項
  • ここで説明しているレンジインデクスが使用される条件は,内部導出表の展開後の問合せ式,または探索条件の等価変換によって変換された探索条件に対して適用されます。内部導出表の展開については,マニュアルHADB SQLリファレンス内部導出表を参照してください。探索条件の等価変換機能については,「5.11 探索条件の等価変換」を参照してください。

  • 探索条件中に指定した値式で,スカラ演算中に定数だけを指定している場合,そのスカラ演算を定数と見なすことがあります。定数と等価なスカラ演算については,マニュアルHADB SQLリファレンス値式の指定形式および規則規則にある表定数と等価な値式となる条件を参照してください。

  • 表を結合する際,表の結合方式によっては結合条件の評価時にレンジインデクスを使用しないことがあります。表の結合方式については,「5.5 表の結合方式」を参照してください。

  • 副問合せを指定した場合,適用される副問合せの処理方式によってはレンジインデクスを使用しないことがあります。副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

〈この項の構成〉

(1) チャンクのスキップに使用されるレンジインデクス

次の表に示す条件をすべて満たす場合,SQL文の実行時にレンジインデクスが使用されて,チャンクのスキップが行われます。

表5‒4 レンジインデクスが使用される条件

項番

レンジインデクスが使用される条件

対応する例

1

WHERE句に指定した探索条件,または結合表のON 探索条件で,次に示すどれかの述語に,レンジインデクスの構成列※1が指定されている必要があります。

  • 比較述語

    ただし,比較演算子の左側と右側に同じ表の列※2が指定されている場合は,レンジインデクスは使用されません。

(例1)

(例2)

(例3)

(例14)

(例15)

  • BETWEEN述語

    ただし,値式1と同じ表の列※2が,値式2または値式3に指定されている場合は,レンジインデクスは使用されません。

(例4)

(例5)

  • IN述語(値式)

    ただし,値式1と同じ表の列※2が,値式2以降の値式に指定されている場合は,レンジインデクスは使用されません。

(例6)

(例7)

  • IN述語(表副問合せ)

    副問合せの処理方式にハッシュ実行が適用された場合に限り,レンジインデクスが使用されます。

(例17)

  • LIKE述語

    LIKE指定の場合は,次に示すどれかの条件に該当している必要があります。なお,LIKE述語中にESCAPEを指定している場合は,エスケープ文字が,定数または?パラメタで指定されている必要があります。

    ・パターン文字列にユーザ情報取得関数だけが指定されている

    ・パターン文字列に?パラメタだけが指定されている

    ・パターン文字列に,'文字列%'(%は特殊文字)を先頭から含む定数だけが指定されている

    ・パターン文字列に,'文字列_'(_は特殊文字)を先頭から含む定数だけが指定されている

    ・パターン文字列に特殊文字(%_ )を含まない定数だけが指定されている(完全一致)

    NOT LIKE指定の場合は,次に示すどれかの条件に該当している必要があります。

    ・パターン文字列に?パラメタだけが指定されている

    ・パターン文字列に,'文字列%'(%は特殊文字)を先頭から含む定数だけが指定されている

(例8)

(例9)

  • 限定述語

    副問合せの処理方式にハッシュ実行が適用された場合に限り,レンジインデクスが使用されます。

(例17)

2

項番1で説明している述語が,論理演算子ORまたはNOTを使用した条件中に指定されている場合は,レンジインデクスは使用されません。

(例10)

3

項番1で説明している述語中にスカラ演算がある場合は,レンジインデクスは使用されません。

(例11)

4

項番1で説明している述語中に,3つ以上の異なる表の列※2を指定している場合は,レンジインデクスは使用されません。

(例12)

5

  • 外への参照列を含む副問合せ中に項番1で説明している述語が指定されていて,かつ副問合せの処理方式にネストループ実行が適用された場合

    ただし,項番1で説明している述語中に,外への参照列がある場合は,外への参照列をインデクス構成列とするレンジインデクスは使用されません。

  • 外への参照列を含む副問合せ中に項番1で説明している述語が指定されていて,かつ副問合せの処理方式にハッシュ実行が適用された場合

    項番1で説明している述語中に,「外への参照列列指定」または「列指定外への参照列」のどちらかの形式で指定された外への参照列がある場合に限り,レンジインデクスが使用されます。

(例13)

(例16)

注※1

配列要素参照の配列値式に指定した列(次の例の下線部分の列)がレンジインデクスの構成列の場合,レンジインデクスが使用される条件に該当します。

(例)

"C1"[ANY]=10

"C1"[ANY(1)]=1

"C1"[2]=1

注※2

配列要素参照の配列値式に指定された列も該当します。

表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合,条件を満たすレンジインデクスがすべて(複数個)使用されます。

チャンクのスキップに使用できるレンジインデクスかどうかを確認する場合は,マニュアルHADB システム構築・運用ガイドレンジインデクスの確認(チャンクのスキップの可否)を参照してください。

(2) セグメントのスキップに使用されるレンジインデクス

表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たす場合,SQL文の実行時にレンジインデクスが使用されて,セグメントのスキップが行われます。「表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合,条件を満たすレンジインデクスがすべて(複数個)使用されます。

ただし,SQL文の実行時にB-treeインデクスまたはテキストインデクスが使用された場合,レンジインデクスを使用したセグメントのスキップは行われません。