述部およびアクセス・パスの選択
述部 は、SQL ステートメント の WHERE 文節、HAVING 文節、または ON 文節にあります。すなわち、述部は データの属性を記述します。
SQLステートメントの述部は、Db2がそのステートメントのアクセス・パスを選択する方法に影響を与えます。 SQL では同じ照会を異なる複数の方法で表現できるため、述部がパスの選択にどのような影響を与えるかを知っていると、データに効率的にアクセスする照会を作成する上で役立ちます。
ほとんどの述部は、表の列に基づいています。 表アクセス時に、(索引経由の) 行の限定、または (スキャンにより返される) 行の拒否のいずれかを行います。 その結果として、限定または拒否された行は 、その表に対して選択されたアクセス・パスとは無関係です。
以下の照会には 3 つの 述部があります。C1 の等号述部、C2 の BETWEEN 述部、ならびに C3 の LIKE 述部です。
SELECT * FROM T1
WHERE C1 = 10 AND
C2 BETWEEN 10 AND 20 AND
C3 NOT LIKE 'A%'
Db2がアクセス・パスを選択する場合、HAVING文節の述部は使用されません。 ここで述部 という用語は、WHERE 文節または ON 文節の述部のみを指します。 述部の以下の属性が、アクセス・パス選択に影響を及ぼします。
- 述部の演算子または構文に応じた、述部のタイプ
- 述部が索引可能 かどうか
- 述部がステージ 1 であるか、ステージ 2 であるか
- 述部に rowid 列が含まれているかどうか
- 述部が ON 文節の一部であるかどうか
以下の用語は、特定の種類の述部の区別と分類に使用されます。
- 単純または複合
- 複合 述部は、2 つの述部 (単純述部または複合述部の いずれか) が AND または OR ブール演算子で結合されたものです。 その他の述部はすべて、単純 述部です。
- ローカルまたは結合
- ローカル述部 は、表を 1 つだけ参照します。 これらは表に対してローカルであり、その表に対して返される行の数を制限します。 結合述部 は、複数の表または相関参照に関係します。 これらは、複数の表から行がどのように結合されるかを判別します。
- ブール項
- 複合 OR 述部構造に組み込まれていない述部は すべて、ブール項 です。 ブール項が特定の行で偽と評価されると、WHERE 文節全体がその特定行で 偽と評価されます。
ON 文節の述部
ON 文節は、外部結合で結合条件を提供します。 全外部結合では、文節は等価述部のみ使用できます。 その他の外部結合の場合は、 文節は、副照会を含む述部を除くどのような述部でも使用することができます。
内部結合の場合、ON 文節の述部は結合条件およびローカル・フィルター操作を提供することができ、WHERE 文節の述部と意味的に同等になります。
全外部結合では、ON 文節は、ステージ 2 述部のように結合操作中に評価されます。
外部結合では、結合の後に評価される述部は、ステージ 2 述部です。 表式の述部は結合の前に評価され、それらはステージ 1 述部になります。
例えば、以下の文では、述語 EDLEVEL
> 100 はフルジョインの前に評価され、ステージ1の述語となります
SELECT * FROM (SELECT * FROM DSN8D10.EMP
WHERE EDLEVEL > 100) AS X FULL JOIN DSN8D10.DEPT
ON X.WORKDEPT = DSN8D10.DEPT.DEPTNO;