ColorationStyle

MQT(マテリアライズ照会表)の作成方法

MQT(マテリアライズ照会表)の作成方法について説明します。
MQTとは、実体のあるビューです。
実体があるということは、インデックスを付与することできる。表スペースを必要とするということになります。
尚、MQTはMaterialized Query Tableの略です。

MQTの作成

ここではMQTを作成のSQLを説明します。
構文は以下の通りです。
構文の詳細は公式サイトを参照ください。
MQTなのに、「CREATE TABLE」で始まるところが個人的に違和感ありです。
何故「CREATE MATERIALIZED QUERY TABLE」ではないのか…。

【文法】

 CREATE TABLE MQT名 AS (SELECT文)
 INITIALLY DEFERRED
 REFRESH DEFERRED|IMMEDIATE

【実行例】

実際にSQLを実行しMQTを作成します。
SQLは以下の通りです。

SQLの実行結果は以下の通りです。
これでMQTが作成されました。

リフレッシュが必要なのでREFRESHコマンドを実行後にMQTをSELECTしてみます。

実行結果は以下になります。データが抽出されました。

MQTの削除

 MQTの削除のSQLを説明します。
 構文は以下の通りです。

【文法】

 DROP TABLE MQT名

【実行例】

実際にSQLを実行しMQTを削除します。
SQLは以下の通りです。

SQLの実行結果は以下の通りです。
これでMQTが削除されました。

REFRESHオプションの違い

 REFRESHオプションの違いについて説明します。
 MQTの作成では手動反映のMQTを作成しました。
 自動反映のMQTも作成して違いを確認します。

 以下のSQLを実行し手動反映、自動反映のMQTを作成します。

SQLの実行結果は以下の通りです。
これでMQTの作成とリフレッシュが行われました。

両方のMQTをSELECTします。
作成直後なので内容は同じです。

元のテーブル(基礎表)に対しINSERTを実行しをSELECTします。
手動反映のMQT「MQT_PRODUCT_DEF」には変更が反映されませんが、自動反映のMQT「MQT_PRODUCT_IMM」には変更が反映され行が追加されます。

手動反映のMQTをREFRESHすると変更が反映されます。

MQTの定義の確認

 MQTの定義(CREATE文)はカタログビューSYSCAT.VIEWSのTEXTで確認することができます。
 MQTなのに何故VIEWSなのか。。。は謎である。

SQLの実行結果は以下の通りです。