説明
このステートメントは、マテリアライズドビューを作成するために使用されます。
マテリアライズドビューは、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)更新される特殊なタイプのデータベースオブジェクトです。マテリアライズドビューには集計、結合、サブクエリなどの操作を含めることができ、さらにパフォーマンスを向上させるためにインデックスやパーティショニングを行うこともできます。
権限要件
マテリアライズドビューを作成するには、CREATE TABLE 権限が必要です。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
CREATE MATERIALIZED VIEW view_name [([column_list] [PRIMARY KEY(column_list)])]
[table_option_list]
[partition_option]
[mv_column_group_option]
[refresh_clause]
[query_rewrite_clause]
[on_query_computation_clause]
AS view_select_stmt;
column_list:
column_name [, column_name ...]
refresh_clause:
REFRESH [refresh_option [nested_refresh_option]] [mv_refresh_on_clause]
| NEVER REFRESH
refresh_option:
COMPLETE
| FAST
| FORCE
nested_refresh_option:
INDIVIDUAL
| INCONSISTENT
| CONSISTENT
mv_refresh_on_clause:
[ON DEMAND] [[START WITH expr] [NEXT expr]]
query_rewrite_clause:
DISABLE QUERY REWRITE
| ENABLE QUERY REWRITE
on_query_computation_clause:
DISABLE ON QUERY COMPUTATION
| ENABLE ON QUERY COMPUTATION
mv_column_group_option:
WITH COLUMN GROUP(all columns)
| WITH COLUMN GROUP(each column)
| WITH COLUMN GROUP(all columns, each column)
パラメータ説明
説明
マテリアライズドビューを作成するステートメントでは、インデックスを直接作成できません。CREATE INDEX ステートメントまたは ALTER TABLE ステートメントを使用して、マテリアライズドビューにインデックスを作成できます。
パラメータ |
説明 |
|---|---|
| view_name | 作成するマテリアライズドビューの名前を指定します。 |
| column_list | オプションです。マテリアライズドビューの列リストを指定します。ビューの列に明示的な名前を付けたい場合は、column_list句を使用し、カンマ区切りで列名を記述します。
説明
|
| column_name | マテリアライズドビューの列名を指定します。デフォルトでは、SELECTステートメントで取得した列名がビューの列名として使用されます。 |
| PRIMARY KEY | マテリアライズドビューの主キーを指定するために使用されます。
注意
|
| table_option_list | オプションです。マテリアライズドビューのテーブルオプションを指定します。通常のテーブルと同様に、マテリアライズドビューにも個別にTable Optionを設定できます。詳細なパラメータ情報については、CREATE TABLEを参照してください。 |
| partition_option | オプションです。マテリアライズドビューのパーティションオプションを指定します。通常のテーブルと同様に、マテリアライズドビューにも個別にパーティションを設定できます。詳細なパラメータ情報については、CREATE TABLEを参照してください。 |
| mv_column_group_option | オプションです。マテリアライズドビューのストレージ形式を指定します。指定しない場合、デフォルトで行ストア形式のマテリアライズドビューが作成されます。詳細については、下記のmv_column_group_optionを参照してください。 |
| refresh_clause | オプションです。マテリアライズドビューのリフレッシュ方式を指定します。詳細については、下記のrefresh_clauseを参照してください。 |
| mv_refresh_on_clause | オプションです。マテリアライズドビューのリフレッシュタイミングを指定します。詳細については、下記のmv_refresh_on_clauseを参照してください。 |
| query_rewrite_clause | オプションです。現在のマテリアライズドビューで自動リライトを有効にするかどうかを指定します。詳細については、下記のquery_rewrite_clauseを参照してください。 |
| on_query_computation_clause | オプションです。現在のマテリアライズドビューがリアルタイムマテリアライズドビューかどうかを指定します。詳細については、下記のon_query_computation_clauseを参照してください。 |
| view_select_stmt | マテリアライズドビューのデータを照会する (SELECT) ステートメントを定義します。このステートメントは、ベーステーブルからデータを取得し、結果をマテリアライズドビューに格納します。view_select_stmt の構文は通常の SELECT ステートメントと同じです。構文の詳細については、SELECTステートメントを参照してください。
説明
|
mv_column_group_option
WITH COLUMN GROUP(all columns):行ストア形式のマテリアライズドビューを作成することを指定します。WITH COLUMN GROUP(each column):カラムストア形式のマテリアライズドビューを作成することを指定します。WITH COLUMN GROUP(all columns, each column):行ストアとカラムストアの冗長形式のマテリアライズドビューを作成することを指定します。
説明
SHOW CREATE TABLE view_name; または SHOW CREATE VIEW view_name; コマンドを使用して、マテリアライズドビューの定義を確認し、そのストレージ形式を特定できます。
refresh_clause
REFRESH [refresh_option [nested_refresh_option]] [mv_refresh_on_clause]:マテリアライズドビューの更新方法を示します。refresh_option:マテリアライズドビューの更新方法を指定します。オプションです。更新方法を指定しない場合、デフォルトはFORCEです。COMPLETE:フル更新を行うことを示します。これは、マテリアライズドビュー全体のデータを再計算し、ビュー内のデータがソーステーブルと完全に一致することを保証します。FAST:増分更新を行うことを示します。これは、ソーステーブルで変更されたデータのみを更新し、ビュー全体の再計算を回避します。注意
REFRESH FASTメソッドは、マテリアライズドビューのログに記録された情報を使用して、増分更新が必要な内容を決定します。そのため、増分更新を使用してマテリアライズドビューを更新する場合は、マテリアライズドビューを作成する前に、ベーステーブルのマテリアライズドビューのログ(mlog)を作成する必要があります。- マテリアライズドビューの更新で使用される列はすべて、mlogに含まれている必要があります。
FORCE:デフォルト値で、ハイブリッド更新を行うことを示します。まず増分更新を試み、増分更新が失敗した場合にフル更新を実行します。nested_refresh_option:ネストされたマテリアライズドビューの更新ポリシーを指定します。オプションです。更新ポリシーを指定しない場合、デフォルトはINDIVIDUALです。取り得る値は以下のとおりです:INDIVIDUAL:デフォルト値で、独立更新を行うことを示します。INCONSISTENT:非一貫性の連鎖更新を行うことを示します。CONSISTENT:一貫性の連鎖更新を行うことを示します。
説明
非ネスト型のマテリアライズドビューには、連鎖更新の動作は存在しません。どのような更新ポリシーを指定しても意味がなく、すべてデフォルトで独立更新されます。指定可能な3つの更新ポリシーは、バックグラウンドタスクでのみ有効です。PLパッケージ(DBMS_MVIEW.REFRESH)を使用して手動で更新をスケジュールする場合にのみ、指定されたPLパラメータに従って更新が実行されます。
NEVER REFRESH:マテリアライズドビューを更新する必要がないことを指定します。つまり、マテリアライズドビューは作成時にのみ更新され、作成後は再度更新することが許可されません。
mv_refresh_on_clause
説明
mv_refresh_on_clause 句を使用してリフレッシュ計画を定義するほかに、dbms_mviews.refresh ステアジャーブルを呼び出してマテリアライズドビューを手動でリフレッシュすることもできます。
ON DEMAND:オプションです。マテリアライズドビューをオンデマンドでリフレッシュすることを示します。[[START WITH expr] [NEXT expr]]:オプションです。リフレッシュ間隔を定義します。[START WITH expr]:オプションです。リフレッシュ計画の開始時刻を表す式です。[NEXT expr]:オプションです。次回のリフレッシュ時刻を表す式です。注意
NEXT句を使用する場合、リフレッシュ計画の時間式は将来の時刻に設定する必要があります。そうでない場合、エラーが発生します。- マテリアライズドビューのリフレッシュタスクを定期的に自動実行させたい場合は、
NEXTを定義してスケジュール間隔を設定してください。
現在のタイムゾーンの時間を表すには、sysdate() の使用を推奨します。時間式の例:
START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY
上記の句は、現在時刻(sysdate())から毎日1回マテリアライズドビューをリフレッシュすることを示します。
query_rewrite_clause
注意
この機能を使用するには、マテリアライズドビューが SELECT JOIN と WHERE 句のみを含む、つまりSPJクエリである必要があります。条件を満たさないマテリアライズドビューは、エラーは報告されませんが、リライトには使用されません。
DISABLE QUERY REWRITE:デフォルト値です。現在のマテリアライズドビューで自動リライトを無効にします。ENABLE QUERY REWRITE:現在のマテリアライズドビューで自動リライトを有効にします。
マテリアライズドビューのリライトに関する詳細は、マテリアライズドビューのクエリリライトを参照してください。
on_query_computation_clause
DISABLE ON QUERY COMPUTATION:デフォルト値です。通常のマテリアライズドビューを作成することを指定します。ENABLE ON QUERY COMPUTATION:リアルタイムマテリアライズドビューを作成することを指定します。注意
MIN/MAX関数を使用するマテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。- 外部結合を含むポリマテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。
- 集合クエリを含むマテリアライズドビューは、リアルタイムマテリアライズドビューをサポートしません。
- ネストされたマテリアライズドビューは、リアルタイムマテリアライズドビューとして作成できません。
リアルタイムマテリアライズドビューの詳細については、マテリアライズドビューの作成のリアルタイムマテリアライズドビューの作成セクションを参照してください。
例
テーブル
test_tbl1を作成します。CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT, col4 INT);mv_test_tbl1という名前のマテリアライズドビューを作成します。マテリアライズドビューをcol1列でHashパーティショニングし、8個のパーティションに分割します。完全更新方式を使用してマテリアライズドビューを更新し、現在の日付から更新を開始し、1日ごとに更新します。test_tbl1テーブルの条件col3 >= 30を満たすレコードをベーステーブルとしてクエリし、そのクエリ結果をマテリアライズドビューのデータとします。CREATE MATERIALIZED VIEW mv_test_tbl1 PARTITION BY HASH(col1) PARTITIONS 8 REFRESH COMPLETE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY AS SELECT col1, col2, col3 FROM test_tbl1 WHERE col3 >= 30;mv2_test_tbl1という名前のマテリアライズドビューを作成し、主キーを指定します。CREATE MATERIALIZED VIEW mv2_test_tbl1(c1, c2, c3, PRIMARY KEY(c1)) AS SELECT col1, col2, col3 FROM test_tbl1;カラムストア形式のマテリアライズドビュー
mv3_test_tbl1を作成します。CREATE MATERIALIZED VIEW mv3_test_tbl1 WITH COLUMN GROUP(each column) AS SELECT col1, col2, col3 FROM test_tbl1;マテリアライズドビュー
mv3_test_tbl1の定義を確認します。SHOW CREATE VIEW mv3_test_tbl1;