管理の手引き


自動要約表

要約表は照会応答時間を短縮するのに非常に役立ちます。 いくつかの基本的な照会構造が予想できる多くの環境において、 要約表を使用して以下のことが行えます。

要約表の情報は、 SQL コンパイラーに組み込まれています。 SQL コンパイラーでは、 照会書き直し (SQL コンパイラーによる照会書き直しを参照) と最適化プログラム (データ・アクセスの概念と最適化を参照) が組み合わされて照会が要約表と突き合わされ、 基本表の照会用に要約表を代用するかどうかが判別されます。 要約表を使用して照会に応答するときは、 EXPLAIN 機能 (第 26 章, SQL Explain 機能を参照) を使用して、 選択された要約表を判別することができます。 要約表は多くの点で正規表のように働くので、 表スペース定義を使用したデータ・アクセスの最適化、 索引の作成、および RUNSTATS の発行に関する考慮事項は要約表にも当てはまります。

要約表がいかに役立つかを理解する助けとして、 多次元分析照会に関する例を以下に示します。 この例では、照会がどれだけ要約表を活用するかが示されています。

この例では、 1 組の顧客と 1 組のクレジット・カード口座を含むウェアハウスのシナリオを想定します。 ウェアハウスには、 クレジット・カードが使用された一連のトランザクションが記録されています。 各トランザクションには、 一緒に購入された 1 組の品目が含まれます。 2 つの表 (トランザクション品目を含む表と、 購入トランザクションを識別する表) が大きく、ともにスター型のハブであるため、 この環境は、複数スター環境として分類することができます。

トランザクションを説明する 3 つの階層次元があります。 それは、製品、場所、そして時刻です。 製品階層は、製品グループと製品ラインを表す 2 つの正規化された表に記録されます。 場所階層には、市町村、都道府県、および国情報が含まれ、 単一の非正規化された表で表されます。 時刻階層には、日、月、および年情報が含まれ、 単一データ・フィールドでコード化されます。 日付の次元は、 組み込み機能を使用して、 トランザクションの日付フィールドから抽出されます。 このシナリオには、 顧客の口座情報、および顧客情報を表す別の表もあります。

要約表は、次の各レベルについて、売上の合計を使用して作成されます。

広い範囲にわたる照会でも、この保管された集約データから答えを取り出すことができます。 以下の例では、製品グループおよび製品ラインの次元、市町村、都道府県、 および国の次元、そして時間の次元にしたがって、 売上の合計と数を計算しています。 この例では、GROUP BY 文節にいくつか別の列が含まれています。

  CREATE TABLE dba.PG_SALESSUM
    AS (
        SELECT l.id AS prodline, pg.id AS pgroup,
               loc.country, loc.state, loc.city, 
               l.name AS linename, pg.name AS pgname,
               YEAR(pdate) AS year, MONTH(pdate) AS month,
               t.status,
               SUM(ti.amount) AS amount,
               COUNT(*) AS count
        FROM   cube.transitem AS ti, cube.trans AS t,
               cube.loc AS loc, cube.pgroup AS pg,
               cube.prodline AS l
        WHERE  ti.transid = t.id
           AND ti.pgid = pg.id
           AND pg.lineid = l.id
           AND t.locid = loc.id
           AND YEAR(pdate) > 1990
        GROUP BY l.id, pg.id, loc.country, loc.state, loc.city,
                 year(pdate), month(pdate), t.status, l.name, pg.name
       )
  DATA INITIALLY DEFERRED REFRESH DEFERRED;
 
  REFRESH TABLE dba.SALESCUBE;

要約表は、通常、基本ファクト表と比べてかなり小さくなっています。 (例で示されているように) DEFERRED オプションを指定することにより、 要約表が更新されるときを制御することができます。

このような事前計算済み合計を利用できる照会には、次のものがあります。

これらの照会の正確な答えはこの要約表にはありませんが、 答えの一部がすでに計算されているので、要約表を使用して答えを計算する方が、 大きな基礎表を使用するよりもかかる費用がはるかに安くなります。 費用のかかる基礎データの結合、分類、および集約は、 要約表では回避、または削減されます。

以下は、すでに計算されている要約表の中の結果を使用できるので、 パフォーマンスが大幅に改善される照会のサンプルです。 最初の例は、1995 と 1996 の売上の合計を戻します。

  SET CURRENT REFRESH AGE=ANY
 
  SELECT YEAR(pdate) AS year, SUM(ti.amount) AS amount
  FROM   cube.transitem AS ti, cube.trans AS t,
         cube.loc AS loc, cube.pgroup AS pg,
         cube.prodline AS l
  WHERE  ti.transid = t.id
     AND ti.pgid = pg.id
     AND pg.lineid = l.id
     AND t.locid = loc.id
     AND YEAR(pdate) IN (1995, 1996)
  GROUP BY year(pdate);

2 番目の例は、1995 と 1996 の製品グループごとの売上の合計を戻します。

  SET CURRENT REFRESH AGE=ANY
 
  SELECT pg.id AS "PRODUCT GROUP",
         SUM(ti.amount) AS amount
  FROM   cube.transitem AS ti, cube.trans AS t,
         cube.loc AS loc, cube.pgroup AS pg,
         cube.prodline AS l
  WHERE  ti.transid = t.id
     AND ti.pgid = pg.id
     AND pg.lineid = l.id
     AND t.locid = loc.id
     AND YEAR(pdate) IN (1995, 1996)
  GROUP BY pg.id;

データベースが大きいほど、 このような照会の応答時間はさらに短縮できます。 これは、要約表が基本表ほど速く大きくならないためです。 要約表の 1 つの利点は、 DB2 ユニバーサル・データベースがその表を使用して、 効果的に照会間の作業の重複をなくすことができる点です。 1 度計算して要約表を構築すれば、 その内容を多数の照会に再利用することができます。


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