5.11.6 行値構成子を指定したIN述語に関する等価変換(同じ表の列指定の抽出)
IN述語の左側の行値構成子に,複数の表の列指定がある場合や,列指定とスカラ演算を含む指定が混在している場合,同じ表の列指定だけで構成されるIN述語をAND条件で追加する等価変換が行われます。ただし,論理演算子ORやNOTに指定されたIN述語は,等価変換されません。
この等価変換によって,表を結合する前に追加したIN述語を評価できるようになり,表の結合処理への入力行を削減できることがあります。また,表の検索時にインデクスが使用されることがあります。
等価変換の例を次に示します。例中のC1,C2,C3は列名を意味しています。
- 〈この項の構成〉
(1) 例1
- [説明]
-
IN述語の左側に,複数の表の列指定とスカラ演算が指定されている行値構成子があります。この行値構成子から同じ表の列指定が抽出され,IN述語の条件が追加されます。等価変換後,追加されたIN述語の条件で,探索時にインデクスが使用されることがあります。
(2) 等価変換される条件の形式
等価変換される条件の形式を次に示します。
-
IN述語
行値構成子 IN (行値構成子 〔,行値構成子〕…)
IN述語の左側の行値構成子が,次の条件を満たす場合に等価変換されます。
-
行値構成子要素に列指定が含まれている
-
行値構成子要素がすべて列指定の場合,異なる表の列指定が含まれている
-