5.3.1 SQL文の実行時にレンジインデクスが使用される条件
表にレンジインデクスが定義されている場合,WHERE句の探索条件,更新系SQLのWHERE 探索条件,結合表のON 探索条件,およびSQL文の実行時に使用されるB-treeインデクスまたはテキストインデクスによって,SQL文の実行時にレンジインデクスが使用されるかどうかが決まります。
ここでは,チャンクのスキップに使用するレンジインデクスの決定方法と,セグメントのスキップに使用するレンジインデクスの決定方法について説明します。
- 留意事項
-
-
ここで説明しているレンジインデクスが使用される条件は,内部導出表の展開後の問合せ式,または探索条件の等価変換によって変換された探索条件に対して適用されます。内部導出表の展開については,マニュアルHADB SQLリファレンスの内部導出表を参照してください。探索条件の等価変換機能については,「5.11 探索条件の等価変換」を参照してください。
-
探索条件中に指定した値式で,スカラ演算中に定数だけを指定している場合,そのスカラ演算を定数と見なすことがあります。定数と等価なスカラ演算については,マニュアルHADB SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。
-
表を結合する際,表の結合方式によっては結合条件の評価時にレンジインデクスを使用しないことがあります。表の結合方式については,「5.5 表の結合方式」を参照してください。
-
副問合せを指定した場合,適用される副問合せの処理方式によってはレンジインデクスを使用しないことがあります。副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。
-
(1) チャンクのスキップに使用されるレンジインデクス
次の表に示す条件をすべて満たす場合,SQL文の実行時にレンジインデクスが使用されて,チャンクのスキップが行われます。
項番 |
レンジインデクスが使用される条件 |
対応する例 |
---|---|---|
1 |
WHERE句の探索条件,更新系SQLのWHERE 探索条件,または結合表のON 探索条件で,次に示すどれかの述語に,レンジインデクスの構成列※1が指定されている必要があります。 |
− |
|
||
|
||
|
||
|
||
|
||
|
||
2 |
項番1で説明している述語が,論理演算子ORまたはNOTを使用した条件中に指定されている場合は,レンジインデクスは使用されません。 |
|
3 |
項番1で説明している述語中にスカラ演算がある場合は,レンジインデクスは使用されません。 |
|
4 |
項番1で説明している述語中に,3つ以上の異なる表の列※2を指定している場合は,レンジインデクスは使用されません。 |
|
5 |
|
- 注※1
-
配列要素参照の配列値式に指定した列(次の例の下線部分の列)がレンジインデクスの構成列の場合,レンジインデクスが使用される条件に該当します。
(例)
"C1"[ANY]=10
"C1"[ANY(1)]=1
"C1"[2]=1
- 注※2
-
配列要素参照の配列値式に指定された列も該当します。
「表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合,条件を満たすレンジインデクスがすべて(複数個)使用されます。
チャンクのスキップに使用できるレンジインデクスかどうかを確認する場合は,マニュアルHADB システム構築・運用ガイドのレンジインデクスの確認(チャンクのスキップの可否)を参照してください。
(2) セグメントのスキップに使用されるレンジインデクス
「表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たす場合,SQL文の実行時にレンジインデクスが使用されて,セグメントのスキップが行われます。「表5‒4 レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合,条件を満たすレンジインデクスがすべて(複数個)使用されます。
ただし,SQL文の実行時にB-treeインデクスまたはテキストインデクスが使用された場合,レンジインデクスを使用したセグメントのスキップは行われません。