照会の結果によって定義されるマテリアライズ照会表を作成すると、
特定の SQL アプリケーションのパフォーマンスを向上させることができます。
このタスクについて

NOT LOGGED として定義されている表スペースにマテリアライズ照会表を作成して、
データに加えられた変更のロギングによるパフォーマンスのオーバーヘッドを回避する必要があります。
プロシージャー
マテリアライズ照会表として新しい表を作成するには、次のようにします。
- CREATE TABLE ステートメントを作成して、全選択を指定します。
マテリアライズ照会表の列名を明示的に指定するか、またはDb2が全選択から列名を派生させることを許可することができます。 マテリアライズ照会表の列定義は、同じ全選択で定義されている宣言済みグローバル一時表の列定義と同じです。
- マテリアライズ照会表を定義するときは、DATA INITIALLY DEFERRED および REFRESH DEFERRED 文節を含めます。
- DATA INITIALLY DEFERRED 文節
- Db2は、表の作成時にマテリアライズ照会表にデータを追加しません。 したがって、ユーザーが明示的にマテリアライズ照会表にデータを追加する必要があります。
- システム管理のマテリアライズ照会表の場合は、最初は、REFRESH TABLE ステートメントを使用して表にデータを追加する必要があります。
- ユーザー管理のマテリアライズ照会表の場合は、LOAD ユーティリティー、INSERT ステートメント、または REFRESH TABLE ステートメントを使用して、表にデータを追加します。
- REFRESH DEFERRED 文節
- Db2は、その基本表が更新されるときに、マテリアライズ照会表のデータを即時に更新しません。 ユーザーは、任意のときに REFRESH TABLE ステートメントを使用して、マテリアライズ照会表を更新し、基礎となる基本表とのデータの現行性を維持することができます。
- マテリアライズ照会表の管理を何が行うか指定するには、次のようにします。
- MAINTAINED BY SYSTEM 文節
マテリアライズ照会表が、システム管理のマテリアライズ照会表であることを指定します。 システム管理のマテリアライズ照会表の更新は、LOAD ユーティリティー、あるいは INSERT、
UPDATE、MERGE、TRUNCATE、または DELETE ステートメントを使用して行うことができません。 システム管理のマテリアライズ照会表を更新できるのは、REFRESH TABLE ステートメントだけです。 BY SYSTEM は、
MAINTAINED BY 文節を指定しなければ、デフォルトの動作になります。
REFRESH TABLE ステートメントにより一括削除操作が開始されることになるため、
システム管理のマテリアライズ照会表は、セグメント表スペースまたはユニバーサル表スペースに作成してください。
- MAINTAINED BY USER 文節
- 表がユーザー管理のマテリアライズ照会表であることを指定します。 ユーザー管理のマテリアライズ照会表の更新は、REFRESH TABLE ステートメントのほかに、LOAD ユーティリティーと、INSERT、UPDATE、MERGE、TRUNCATE、および DELETE ステートメントを使用して行うことができます。
- 照会の最適化を使用可能にするかどうかを指定します。
- ENABLE QUERY OPTIMIZATION 文節
- Db2が、自動照会再書き込みにおいてマテリアライズ照会表を考慮できることを指定します。 照会の最適化を使用可能にすると、Db2は、マテリアライズ照会表の全選択で選択できるものをより制限的に制限します。
- DISABLE QUERY OPTIMIZATION 文節
- Db2が、自動照会再書き込みにおいてマテリアライズ照会表を考慮できないことを指定します。
推奨 :ユーザ管理マテリアライズドクエリテーブルを作成する際には、最初にクエリオプティマイザを無効にします。 それ以外の場合、Db2は、空のマテリアライズ照会表を使用するように自動的に照会を再書き込みする場合があります。 ユーザー管理のマテリアライズ照会表にデータを追加した後で、表を変更して照会最適化を使用可能にすることができます。
結果
マテリアライズ表の分離レベルは、CREATE TABLE ステートメントの実行で使用される分離レベルです。
作成後のマテリアライズ照会表は、いくつかの例外を除き、データベース・システム内の他の表と外観も動作も同じです。 Db2 データベース操作において、他のテーブルを許可する場所であれば、いくつかの制限付きで、実体化されたクエリテーブルを許可します。 他の表の場合と同様に、マテリアライズ照会表についても索引を作成できます。しかし、作成する索引はユニーク索引であってはなりません。 代わりに、Db2は、マテリアライズ照会表の定義を使用して、索引を照会最適化のためのユニーク索引として扱うことができるかどうかを判別します。
例
以下の CREATE TABLE ステートメントでは、TRANSCNT という名のマテリアライズ照会表を定義します。 TRANSCNT 表は、TRANS 表内のトランザクション数を、アカウント別、ロケーション別、および年別に要約して示します。CREATE TABLE TRANSCNT (ACCTID, LOCID, YEAR, CNT) AS
(SELECT ACCOUNTID, LOCATIONID, YEAR, COUNT(*)
FROM TRANS
GROUP BY ACCOUNTID, LOCATIONID, YEAR )
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY SYSTEM
ENABLE QUERY OPTIMIZATION;
DATA INITIALLY DEFERRED文節とREFRESH DEFERRED文節と一緒に全選択を使用すると、表がマテリアライズ照会表として定義されます。