Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.11.2 OR条件に関する等価変換(IN条件への変換)

OR条件中に同じ列に対する=条件が指定されている場合,次に示す等価変換が実行されます。

IN条件に変換してOR条件の外側に追加すると,検索範囲を絞り込むための条件として有効に利用できることがありますが,IN条件を追加すれば条件評価の負荷が増えることもあります。

注※

ANYを指定した配列要素参照(識別番号は省略)が探索条件に指定されている場合は,探索条件が同じであっても等価変換は実行されません。具体例については,「(2) 等価変換されない例」の「(c) 例3」を参照してください。

重要
  • WHERE句の探索条件,結合表のON 探索条件,およびHAVING句の探索条件に指定したOR条件が等価変換の対象になります。

  • 索条件が等価変換された場合,検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換の例を次に示します。例中のC1C2C3は列名を意味しています。

〈この項の構成〉

(1) 等価変換される例

(a) 例1

[図データ]

[説明]

OR条件中に指定されているすべての条件が,C1列に対する=条件のため,IN条件に等価変換されます。

(b) 例2

[図データ]

[説明]

OR条件中に指定されているC1列に対する=条件を,IN条件に変換してOR条件の外側に追加します。

(c) 例3

[図データ]

[説明]

OR条件中に指定されている条件が,同じ配列要素参照に対する=条件("C1_ARRAY"[ANY(1)] = XXX)のため,OR条件がIN条件に等価変換されます。

(2) 等価変換されない例

(a) 例1

[図データ]

[説明]

OR条件中に指定されているすべての条件が,C1列に対する=条件ですが,NOT条件中に指定されているため,等価変換されません。

(b) 例2

[図データ]

[説明]

OR条件の両側に「"C1" = 100」と「"C1" = 200」というIN条件に等価変換される条件がありますが,AND条件に指定されたOR条件の場合は等価変換されません。

(c) 例3

[図データ]

[説明]

OR条件に指定されている配列要素参照には識別番号が指定されていないため,HADBが各配列要素参照に異なる識別番号を割り振ります。そのため,指定された探索条件は同じではないと判定されて,等価変換されません。

(3) 等価変換の規則

  1. 比較述語で次に示す形式の場合は,OR条件の外側にIN条件を追加します。ただし,列指定に指定する列が外への参照列の場合は,等価変換されません。外への参照列については,マニュアルHADB SQLリファレンス副問合せの指定形式および規則を参照してください。

    • 列指定 = 定数

      列指定と定数が逆に指定されている場合でも,等価変換されます。

    • 列指定 = 日時情報取得関数(またはユーザ情報取得関数

      列指定と日時情報取得関数(またはユーザ情報取得関数)が逆に指定されている場合でも,等価変換されます。

    • 列指定 = ?パラメタ

      列指定と?パラメタが逆に指定されている場合でも,等価変換されます。

    注※

    列指定のほかに,配列値式が列指定でANYを指定した配列要素参照も該当します。

  2. 次に示す場合は等価変換されません。