述部処理の要約

早期段階で評価される述部を指定することで、SQL ステートメントのパフォーマンスを向上させることができます。

処理の順序

ステージ で述部を適用する順序は、以下のとおりです。

  1. 索引キー列で突き合わせられる索引可能 述部が、索引のアクセス時に適用されて評価されます。
  2. 索引マッチング述部として選出されなかったものの、引き続き索引列を参照するステージ 1 索引スクリーニング 述部が、索引に適用されます。
  3. アクセスするパーティションの数を制限するために、パーティション列を参照するステージ 1 ページ範囲スクリーニング 述部が適用されます。
  4. データ・ページのアクセス後、他のステージ 1 述部がデータに適用されます。
  5. ステージ 2 述部が、返されたデータ行に適用されます。

DSN_FILTER_TABLE の STAGE 列は、述部が適用されたステージを示します。

索引可能なステージの後の各ステージ内では、以下のタイプの順に述部が適用されます。

  1. 等価述部 (1 つの項目しか含まれていない IN 述部、および同じ値が 2 度含まれる BETWEEN 述部を含む)
  2. 範囲述部と IS NOT NULL 述部が次に評価されます。
  3. その他の述部タイプ

両方の規則のセットが適用されると、述部は照会に現れる順序で 評価されます。 その順序はユーザーの指定であるため、この評価の順序を制御することができ ます。 ただし、コーディング順に関わらず、非相関のサブクエリは相関のサブクエリより先に評価されます。ただし、 Db2 がサブクエリを結合するように相関、非相関、または変換する場合を除きます。

ステージごとの述部タイプおよび処理

プログラム固有のプログラミングインターフェース情報の開始。一般的に、複数の単純述部をOR演算子で結合することによって複合述部を形成する場合、操作の結果は、最新の評価結果として評価される単純述部と同じ特性を持ちます。 例えば、2 つの索引可能述部が OR 演算子で結合されている場合、その結果は 索引可能になります。 また、ステージ 1 述部とステージ 2 述部が OR 演算子で 結合されている場合、その結果はステージ 2 となります。

インデックス可能およびステージ1述語 31
以下の述部は、索引スクリーニング中、またはステージ 1 処理時のデータ・ページ・アクセス後に、マッチング索引アクセスによって評価されます。
  • COL = value 16, 31
  • COL = noncol expr 9, 11, 12, 15, 29, 31, 32
  • COL IS NULL 20, 21
  • COL op value 13, 31
  • COL op noncol expr 9, 11, 12, 13, 29, 31, 32
  • value BETWEEN COL1 AND COL2 13, 32
  • COL BETWEEN value1 AND value2 13
  • COL BETWEEN noncol expr 1 AND noncol expr 2 9, 11, 12, 13, 23, 29
  • COL BETWEEN expr-1 AND expr-2 6, 7, 11, 12, 13, 14, 15, 27, 29
  • COL LIKE 'pattern' 29
  • COL IN (list) 17, 18
  • COL IS NOT NULL 21
  • COL LIKE host variable 2, 29
  • COL LIKE UPPER ('pattern') 29
  • COL LIKE UPPER (host-variable) 2, 29
  • COL LIKE UPPER (SQL-variable)2, 29
  • COL LIKE UPPER (global-variable)2, 29
  • COL LIKE UPPER (CAST ('pattern' AS data-type))2, 29
  • COL LIKE UPPER (CAST (host-variable AS data-type))2, 29
  • COL LIKE UPPER (CAST (SQL-variable AS data-type))2, 29
  • COL LIKE UPPER (CAST (global-variable AS data-type))2, 29
  • 2, 29
  • T1.COL = T2.COL
  • T1.COL op T2.COL
  • T1.COL = T2 col expr 6, 9, 11, 12, 14, 15, 25, 27, 29
  • T1.COL op T2 col expr 6, 9, 11 , 12, 13, 14, 15, 29
  • COL = (noncor subq)
  • COL op (noncor subq) 28
  • COL = ANY (noncor subq) 22, 29
  • (COL1,...COLn) IN (noncor subq) 29
  • COL = ANY (cor subq) 19, 22, 29
  • COL IS NOT DISTINCT FROM value 16
  • COL IS NOT DISTINCT FROM noncol expr 9, 11, 12, 15, 29
  • T1.COL1 IS NOT DISTINCT FROM T2.COL2 3, 4
  • T1.COL1 IS NOT DISTINCT FROM T2 col expr 6, 9, 11, 12, 14, 15, 29
  • COL IS NOT DISTINCT FROM (noncor subq)
  • SUBSTR(COL,1,n) = value
  • SUBSTR(COL,1,n) op value
  • DATE(COL) = value33
  • DATE(COL) op value33
  • YEAR(COL) = value33
  • YEAR(COL) op value33
ステージ1 インデックス不可能な述語 31
以下の述部は、ステージ 1 の処理中、索引スクリーニング中、またはデータ・ページ・アクセス後に評価されます。
  • COL <> value 8, 1 1
  • COL <> noncol expr 8, 11 , 29
  • COL NOT BETWEEN value1 AND value2
  • COL NOT IN (list)
  • COL NOT LIKE ' char' 29
  • COL LIKE '%char' 1, 29
  • COL LIKE '_char' 1, 29
  • T1.COL <> T2 col expr 8, 11, 27, 29
  • COL op ANY (noncor subq) 22
  • COL op ALL (noncor subq)
  • COL IS DISTINCT FROM value 8, 1 1
  • COL IS DISTINCT FROM (noncor subq)
ステージ 2 述部
以下の述部は、ステージ 2 で、データが返された後に処理される必要があります。
  • COL BETWEEN COL1 AND COL2 10
  • value NOT BETWEEN COL1 AND COL2
  • BETWEEN col exprcol expr 32
  • T1.COL <> T2.COL
  • T1.COL1 = T1.COL2 3, 25
  • T1.COL1 op T1.COL2 3
  • T1.COL1 <> T1.COL2 3
  • COL = ALL (noncor subq)
  • COL <> (noncor subq) 22
  • COL <> ALL (noncor subq)
  • COL NOT IN (noncor subq)
  • COL = (cor subq) 5
  • COL = ALL (cor subq)
  • COL op (cor subq) 5
  • COL op ANY (cor subq) 22
  • COL op ALL (cor subq)
  • COL <> (cor subq) 5
  • COL <> ANY (cor subq) 19
  • (COL1,...COLn) IN (cor subq)
  • COL NOT IN (cor subq)
  • (COL1,...COLn) NOT IN (cor subq)
  • T1.COL1 IS DISTINCT FROM T2.COL2 3
  • T1.COL1 IS DISTINCT FROM T2 col expr 8, 1 1
  • COL IS NOT DISTINCT FROM (cor subq)
  • EXISTS (subq)19
  • expression = value 27, 32
  • expression <> value 27
  • expression op value 27, 32
  • expression op (subq)
  • NOT XMLEXISTS
  • CASE expression WHEN expression ELSE expression END = value 32
索引可能な非ステージ 1 述部
以下の述部は、索引アクセス中に処理できますが、ステージ 1 で処理することはできません。
  • XMLEXISTS 26
注:
  1. ESCAPE 文字が指定され、LIKE 述部で使用されている場合だけ索引可能です。 例えば、 COL LIKE '+%char' ESCAPE '+' は索引可能です。
  2. 変数に入っているパターンが索引可能定数である場合だけ索引可能です (例えば、variable='char%')。
  3. COL1 と COL2 が共に同じ表からのものであるときは、どちらか一方の 列の索引を経由するアクセスは、これらの述部では考慮されません。 ただし、以下の照会は例外です。
    SELECT *  FROM T1 A, T1 B WHERE A.C1 = B.C2;
    相関名を使用すると、照会は、1 つの表を 2 つの別々の表であるかのように 扱います。 したがって、列 C1 と C2 の索引がアクセスのときに考慮されます。
  4. 両サイドに同じデータ・タイプが含まれている場合、述部は索引付け可能であり、ステージ 1 になります。 それ以外の場合、述部はステージ 2 です。
  5. 副照会がある相関値ですでに評価されていると、その副照会は 再評価しないで済む場合があります。
  6. 結合順序の左側の列は、 結合順序の右側の列とは異なる表になければなりません。
  7. expression1 または expression2 に 列を含む表は、既にアクセス済みでなければなりません。
  8. WHERE NOT COL = の処理は、WHERE COL <>の場合と同様に処理され、以下同様に処理されます。
  9. noncol exprnoncol expr1、あるいは noncol expr2 が、 以下のいずれかの形式の非列の式である場合は、述部は 索引可能ではありません。
    • noncol expr + 0
    • noncol expr - 0
    • noncol expr * 1
    • noncol expr / 1
    • noncol expr CONCAT 空文字列
  10. COL、COL1、および COL2 は同じ列でも別の列でもかまいません。 その列は同じ表にあります。
  11. 次のどの一連の条件でも、 すべて述部ステージ 2 になります。
    • 述部が評価される前に取得される最初の値は、BIGINTまたはDECIMAL(P,s)で、p>15および述部が評価される前に取得された2番目の値はREALまたはFLOATです。
    • 述部が評価される前に取得される最初の値は CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC で、述部が評価される前に取得される 2 番目の値は DATE、TIME、または TIMESTAMP です。
  12. 述部がステージ 1 であるが、述部が評価される前に取得される最初の値が CHAR または VARCHAR の場合に索引可能でない場合、述部が評価される前に取得される 2 番目の値は GRAPHIC または VARGRAPHIC で、述部が評価される前に取得される最初の値は Unicode 混合ではありません。
  13. 比較の両側がストリングの場合は、 次のどの一連の条件でも、述部ステージ 1 になりますが、索引可能にはなりません。
    • 述部が評価される前に取得される最初の値は CHAR または VARCHAR で、述部が評価される前に取得される 2 番目の値は GRAPHIC または VARGRAPHIC です。
    • 次の条件の両方が該当する。
      • 比較の両側が CHAR または VARCHAR か、比較の両側が BINARY または VARBINARY である。
      • 述部が評価される前に取得される最初の値の長さは、述部が評価される前に取得される 2 番目の値の長さよりも小さい。
    • 次の条件の両方が該当する。
      • 比較の両側が GRAPHIC か VARGRAPHIC である。
      • 述部が評価される前に取得される最初の値の長さは、述部が評価される前に取得される 2 番目の値の長さよりも小さい。
    • 次の条件の両方が該当する。
      • 述部が評価される前に取得される最初の値は GRAPHIC または VARGRAPHIC で、述部が評価される前に取得される 2 番目の値は CHAR または VARCHAR である。
      • 述部が評価される前に取得される最初の値の長さは、述部が評価される前に取得される 2 番目の値の長さよりも小さい。
  14. 比較の両側が文字列であるが、2つの側が異なるCCSIDを持つ場合、述語がステージ1であり、インデックス化されるのは、述語が評価される前に取得された最初の値がUnicodeであり、比較が注13の条件のいずれにも該当しない場合のみです。
  15. 以下のすべての条件に該当する場合、述部はステージ 2 です。
    • col expr または noncol expr が、2 つの非列の式の積または商の整数値である
    • COL が FLOAT 列または DECIMAL 列である
  16. COLにROWIDデータ・タイプがある場合、Db2は、索引アクセスまたは表スペース・スキャンの代わりに直接行アクセスを使用しようとします。
  17. COLにROWIDデータ型があり、かつ、COLにインデックスが定義されている場合、Db2は索引アクセスの代わりに直接行アクセスを使用しようとします。
  18. 次の条件が 該当する場合、IN リスト述部は索引可能であり、かつステージ 1 です。
    • IN リストに含まれているのが単純項目のみである。 例えば、定数、ホスト変数、パラメーター・マーカー、 および特殊レジスター。
    • IN リストに、集約関数もスカラー関数も含まれない。
    • IN リストは、トリガーの WHEN 文節には含まれない。
    • 左側の列が、15 よりも長い精度の DECIMAL である数値述部の場合、IN リスト内の 項目のいずれも FLOAT ではない。
    • ストリング述部の場合、 コード化文字セット ID は、左側の列の ID と同じである。
    • DATE、TIME、および TIMESTAMP 述部の場合、左側の列が DATE、 TIME、または TIMESTAMP でなければならない。
  19. 特定の述部は、処理中に変換される方法に応じて、索引可能であり、ステージ 1 になる場合があります。
  20. 述部タイプ COL IS NULL および COL IS NOT NULL は、NOT NULL として 定義された列を照会するときは、ステージ 2 述部である。
  21. 述部タイプが COL IS NULL で、 列が NOT NULL として定義されると、C1 は NULL にはなれないので、 表はアクセスされません。
  22. ANY キーワードと SOME キーワードの動作は類似しています。 ANY キーワードを指定した述部が索引付け不能でステージ 1 でない場合は、SOME キーワードを 指定した類似の述部は索引付け不能でステージ 1 ではない。
  23. 以下の環境のいずれかのもとでは、 述部はステージ 2 です。
    • noncol expr が CASE 式である。
    • noncol expr は、2 つの非列の式の積または商であり、 その積または商は整数値であり、かつ COL は FLOAT または DECIMAL 列である。
  24. COL IN (noncor subq) は、タイプ N アクセスの場合 のみステージ 1 になります。 それ以外の場合は、ステージ 2 です。
  25. 内部表が EBCDIC または ASCII 列であり、外部表が Unicode 列の場合、述部はステージ 1 であり、索引可能です。
  26. XMLEXISTSは、常にステージ2です。 しかし、述部でXPath式を評価するためにXML索引を使用できる場合は、同じ述部を索引可能であり、マッチング述部にすることができます。 XMLEXISTS 述部はスクリーニング述部になることはありません。
  27. 述部が式ベースの索引によって索引可能になる可能性があるのは、その述部が列参照の式を含むか、組み込み関数を呼び出すか、または一般式を含む場合です。
  28. このタイプの述部は、NULL 可能性不一致が起こりうる場合はステージ 1 ではありません。
  29. COL がフィールド・プロシージャーを使用して定義されている場合、述部はステージ 2 になります。
  30. このタイプの結合述部は、2 つの列のデータ・タイプ、長さ、およびコード化スキームが同じ場合、ページ範囲スクリーニングの対象となる可能性があります。
  31. 以下の述部は、右側のみに DECFLOAT データ・タイプが含まれる場合に、索引可能なステージ 1 になる可能性があります。
    • COL = value
    • COL = noncol expr
    • COL op value
    • COL op noncol expr
    DECFLOAT データ・タイプが含まれる他の述部は、ステージ 1 でも索引可能でもありません。
  32. expression に以下のいずれかのスカラー関数が含まれている場合、述部には索引付け可能性があります。
    • 日付
    • YEAR
    • SUBSTR(サブストリングの開始値が1の場合。)
  33. COL は DATE、TIME、または TIMESTAMP 列です。

上記のサンプル述部では、以下の省略形および変数値が使用されています。

文字
パーセント (%) や下線 (_) を表す特殊文字を含まない任意の文字ストリング
COL
列名。
コロン式
列式。
cor subq
相関副照会
expression
算術演算子、スカラー関数、集約関数、連結演算子、列、定数、ホスト変数、特殊レジスター、 または日付あるいは時刻の式を含む任意の式
非col式
非列の式であり、これは 列を含まない任意の式のことです。 この式は、算術演算子、スカラー関数、 連結記号、定数、ホスト変数、 特殊レジスター、 または日付や時刻の式を含みます。

非列の式の例は、以下のものがあります。

CURRENT DATE - 50 DAYS
noncor subq
非相関副照会
:NONE.
演算子>、>=、<、<=、¬>、¬<のいずれか
述部
任意のタイプの述部。
パターン (Pattern)
パーセント (%) や下線 (_) を表す特殊文字が 先頭に付いていない 任意の文字ストリング
SUBQ
相関または非相関副照会
Tn
表名。
Tn col expr
表 Tn 内の列を含む式。 この式は、単にその列である可能性があります。
value
定数、ホスト変数、または特殊レジスター

プログラム固有のプログラミングインターフェース情報を終了します。