マテリアライズ照会表の作成および変更

照会の結果が表定義の基になっている表をマテリアライズ照会表 と呼び、そのデータの形式は、マテリアライズ照会表の定義の元となる 1 つ以上の表から取得される事前に計算された結果になります。

マテリアライズ照会表に対する照会の方が 1 つ以上の基本表に対する照会より実行速度が速くなると最適化プログラムが判別する場合には、照会はマテリアライズ照会表に対して実行されるようになります。マテリアライズ照会表は、直接照会することができます。 最適化プログラムでどのようにマテリアライズ照会表が使用されるかについての詳細は、「データベースのパフォーマンスと Query 最適化」 のトピックを参照してください。

TRANS という名前の非常に大規模なトランザクション表に、 会社によって処理されるトランザクションごとに 1 つの行が含まれると仮定します。 表は多くの列によって定義されます。 以下を発行することによって、 トランザクションの日付と量に関する毎日の集計データの入った TRANS 表に対して、 マテリアライズ照会表を作成します。

CREATE TABLE STRANS
  AS (SELECT YEAR AS SYEAR, MONTH AS SMONTH, DAY AS SDAY, SUM(AMOUNT) AS SSUM
      FROM TRANS 
      GROUP BY YEAR, MONTH, DAY )
  DATA INITIALLY DEFERRED
  REFRESH DEFERRED
  MAINTAINED BY USER

このマテリアライズ照会表は、DATA INITIALLY DEFERRED 文節を使用して、 表の作成時にはデータが取り込まれないように指定します。 REFRESH DEFERRED は、TRANS に対する変更が STRANS には反映されないことを示します。 さらに、この表はユーザーによって維持され、ユーザーが ALTER、 INSERT、DELETE、および UPDATE ステートメントを使用できるようにします。

マテリアライズ照会表にデータを取り込む、またはデータが取り込まれた後に表を最新表示するには、REFRESH TABLE ステートメントを使用します。これによって、マテリアライズ照会表に関連付けられている照会が実行され、表には照会の結果が取り込まれます。STRANS 表にデータを取り込むには、以下のステートメントを実行します。

REFRESH TABLE STRANS

選択ステートメントの結果が既存の表にある列と一致する一連の列を提供する場合 (同じ列の数および互換性のある列定義)、既存の基本表からマテリアライズ照会表を作成できます。 例えば、表 TRANSCOUNT を作成します。 その後に、基本表 TRANSCOUNT をマテリアライズ照会表に変更します。

表を作成するには、以下のようにします。

CREATE TABLE TRANSCOUNT
    (ACCTID SMALLINT NOT NULL,
     LOCID SMALLINT,
     YEAR DATE
     CNT INTEGER)

この表をマテリアライズ照会表に変更できます。

ALTER TABLE TRANSCOUNT
  ADD MATERIALIZED QUERY
      (SELECT  ACCTID, LOCID, YEAR, COUNT(*) AS CNT
      FROM TRANS 
      GROUP BY ACCTID, LOCID, YEAR )
  DATA INITIALLY DEFERRED
  REFRESH DEFERRED
  MAINTAINED BY USER

最後に、マテリアライズ照会表を基本表に戻すことができます。例えば、次の通りです。

ALTER TABLE TRANSCOUNT
      DROP MATERIALIZED QUERY

この例では、表 TRANSCOUNT は除去されていませんが、マテリアライズ照会表ではありません。