管理の手引き


操作の移動

SQL コンパイラーは、 照会を最小限の操作数と述部数で構成しようとするため、 照会を書き直して照会操作を移動します。 以下の例に、SQL コンパイラーによって移動可能な操作をいくつか示します。

例 - DISTINCT の除去

EMPNO 列を EMPLOYEE 表の基本キーとして定義した場合、次の照会は、

   SELECT DISTINCT EMPNO, FIRSTNME, LASTNAME
     FROM EMPLOYEE

DISTINCT 文節を除去することで書き直されます。

   SELECT EMPNO, FIRSTNME, LASTNAME
     FROM EMPLOYEE

上記の例では、基本キーが選択されているため、 SQL コンパイラーには返される各行がすでに固有であることがわかっています。 この場合、DISTINCT キーワードは不要です。 照会を書き直さないとすると、 最適化プログラムは必要な処理 (分類など) を含む計画を作成して、 列を一意にすることになります。

例 - 一般的な述部後入れ先出し

述部が通常適用されるレベルを変更すると、 パフォーマンスが向上する場合があります。 たとえば、部署 "D11" 内の従業員全員のリストを示す以下のような視点があるとします。

   CREATE VIEW D11_EMPLOYEE
    (EMPNO, FIRSTNME, LASTNAME, PHONENO, SALARY, BONUS, COMM)
   AS SELECT EMPNO, FIRSTNME, LASTNAME, PHONENO, SALARY, BONUS, COMM
        FROM EMPLOYEE
       WHERE WORKDEPT = 'D11'

さらに、以下の照会があるとします。

   SELECT FIRSTNME, PHONENO
     FROM D11_EMPLOYEE
    WHERE LASTNAME = 'BROWN'

コンパイラーの照会書き直し段階で、 述部 LASTNAME = 'BROWN' が視点 D11_EMPLOYEE にプッシュされます。 これにより、述部が早い時期におそらく効率的に適用されるようになります。 この例で実行可能な実際の照会は、次のようになります。

   SELECT FIRSTNME, PHONENO
     FROM EMPLOYEE
    WHERE LASTNAME = 'BROWN'
      AND WORKDEPT = 'D11'

述部の後入れ先出しは、視点に限定されません。 述部が後入れ先出しされる可能性のあるこれ以外の状況には、 UNION、GROUP BY、派生表 (ネストされた表式や共通表式) があります。

例 - 非相関化

区分データベース環境では、 SQL コンパイラーは次のような照会の書き直しを行う場合があります。

次の例では、 プログラミング・プロジェクトに従事している従業員のうち給与が低い人をすべて検索します。

   SELECT P.PROJNO, E.EMPNO, E.LASTNAME, E.FIRSTNAME,
          E.SALARY+E.BONUS+E.COMM AS COMPENSATION
     FROM EMPLOYEE E, PROJECT P
    WHERE P.EMPNO = E.EMPNO
      AND P.PROJNAME LIKE '%PROGRAMMING%'
      AND E.SALARY+E.BONUS+E.COMM <
        (SELECT AVG(E1.SALARY+E1.BONUS+E1.COMM)
           FROM EMPLOYEE E1, PROJECT P1
           WHERE P1.PROJNAME LIKE '%PROGRAMMING%'
             AND P1.PROJNO = A.PROJNO
             AND E1.EMPNO = P1.EMPNO)

この照会は相関しており、 また PROJECT と EMPLOYEE の両方が PROJNO 上に区分化されていないので、 各プロジェクトが各データベース区画にブロードキャストされます。 さらに、この副照会の評価を何回も行わなければなりません。

SQL コンパイラーは、照会を以下に示すように書き直します。

書き直された SQL 照会では、 プロジェクトごとの AVG_COMP (AVG_PRE_PROJ) を計算し、 その結果を EMPLOYEE 表を含むデータベース区画すべてに同報通信することができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]