管理の手引き


要約表の作成

要約表 は、 その定義が照会の結果に基づいている表です。 したがって、通常、要約表には、 要約表の定義の基礎となる表 (複数も可) に存在するデータに基づいた、 事前に計算された結果が含まれています。 SQL コンパイラーが、基礎表に対するよりも、 要約表に対する照会のほうが効果的に実行できると判断する場合は、 照会は要約表に対して実行され、基礎表に対する照会よりも速く結果を得られます。

区分データベース環境のすべてのノードにわたって表を複製するために、 複製オプションを使用して要約表を作成できます。 これらは、「複製要約表」と呼ばれています。 詳しくは、複製要約表を参照してください。
注:要約表は静的 SQL やニックネームでは使用されません。

要約表または複製要約表の分離レベルが照会の分離レベルと等しいか、同レベルを上回る場合、 照会の最適化には普通、要約表または複製要約表が使用されます。 たとえば、照会がカーソル固定 (CS) 分離レベル下で実行される場合、 最適化には CS または上位の分離レベルで定義された要約表と複製要約表だけが使用されます。

要約表を作成するには、AS fullselect 文節と、 IMMEDIATE または REFRESH DEFERRED オプションを指定した CREATE SUMMARY TABLE ステートメントを使用します。

要約表の列の名前は、一意的に識別することができます。 列名のリストには、 全選択の結果表の列と同じ数だけ名前がなければなりません。 全選択の結果表に重複列があったり、 無名列があったりする場合には、列名のリストを指定することが必要です。 無名列は、選択リストの AS 文節に名前が指定されていない定数、 関数、式、またはセット演算のために生じます。 列名のリストを指定しないと、 表の列は、全選択の結果セットの列の名前を受け継ぎます。

要約表の作成時には、基礎表の変更時に要約表を自動的に最新表示するかどうか、 または REFRESH TABLE ステートメントを使って要約表を最新表示するかどうかを指定するオプションがあります。 基礎表 (複数も可) に変更が加えられたときに要約表を自動的に最新表示するには、 REFRESH IMMEDIATE キーワードを指定します。 以下の場合には、即時最新表示が便利です。

このような状況の場合、要約表は事前計算した結果を提供できます。 要約表の最新表示を据え置きたければ、REFRESH DEFERRED キーワードを指定します。 REFRESH DEFERRED を使用して指定された要約表は、 基礎表に対する変更を反映しません。 要約表は使用するべきですが、必ずそうしなければならないという意味ではありません。 たとえば、DSS を実行する場合、既存のデータを入れるために要約表を使用します。

要約表が次の条件を満たす場合は、 照会の代わりに REFRESH DEFERRED を使用して定義された要約表が使用されます。

SQL 特殊レジスター CURRENT REFRESH AGE SQL は、 ANY または 99999999999999 という値に設定されます。 この 9 の連続した値は、この特殊レジスターで指定できる最大値であり、 DECIMAL(20,6) というデータ・タイプのタイム・スタンプ期間値です。
注:REFRESH DEFERRED を使って定義した要約表は、 静的 SQL を最適化するためには使用されません。

CURRENT REFRESH AGE 特殊レジスターを使用して、据え置き最新表示の要約表が、 最新表示されなければならなくなる前に動的照会に使用できる時間を指定します。 CURRENT REFRESH AGE 特殊レジスターの値を設定するには、 SET CURRENT REFRESH AGE ステートメントを使用します。 CURRENT REFRESH AGE 特殊レジスター、 および SET CURRENT REFRESH AGE ステートメントについて詳しくは、 SQL 解説書 を参照してください。

REFRESH IMMEDIATE を使って定義した要約表は静的照会にも動的照会にも適用可能で、 CURRENT REFRESH AGE 特殊レジスターを使用する必要はありません。
注:CURRENT REFRESH AGE 特殊レジスターをゼロ以外の値に設定するに際しては、注意が必要です。 照会の処理を最適化するために、 基礎表の値を表さない要約表を使用できるようにすると、 照会の結果は基礎表のデータを正確には表しません。 基礎表のデータが変更されていないことを知っている、 またはデータについての知識に基づいて結果のエラーの程度を受け入れるつもりであるなら、 これは無理のない設定といえるでしょう。

ソース・データに影響する活動については、 そのうち要約表に正確なデータが含まることはなくなります。 REFRESH TABLE ステートメントを使用する必要があるでしょう。 詳しくは、SQL 解説書 を参照してください。

有効な fullselect に基づく新しい基礎表を作成したい場合は、 表の作成時に DEFINITION ONLY キーワードを指定します。 表作成操作が完了すると、新しい表は基礎表としてではなく要約表として扱われます。 たとえば、次のようにして LOAD と SET INTEGRITY で使用される例外表を作成できます。

   CREATE TABLE XT AS
      (SELECT T.*, CURRENT TIMESTAMP AS TIMESTAMP,CLOB(",32K)
      AS MSG FROM T) DEFINITION ONLY

以下は、要約表に関連する重要な制約事項です。

  1. 要約表は更新できない。
  2. 基礎表に要約表がある場合、基礎表の列の長さは更新できない。
  3. 要約表にデータをインポートできない。
  4. 要約表に固有索引を作成できない。
  5. 1 つまたは複数のニックネームを参照する結果に基づく要約表は作成できない。

要約表の制約事項に関する完全な説明については、 SQL 解説書 を参照してください。


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