説明
このステートメントは、マテリアライズドビューを作成するために使用されます。
マテリアライズドビューは、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)更新される特殊なタイプのデータベースオブジェクトです。マテリアライズドビューには集計、結合、サブクエリなどの操作を含めることができ、インデックスやパーティションを設定することで、さらにパフォーマンスを向上させることができます。
権限要件
マテリアライズドビューを作成するには、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 [PARALLEL n] [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 [PARALLEL n] [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パラメータに従ってリフレッシュが実行されます。
PARALLEL n:リフレッシュの並列度を指定します。nの値は0以上の整数です。0の場合、リフレッシュの並列度はシステム変数mview_refresh_dopの値を使用します。説明
V4.4.2バージョンでは、V4.4.2 BP2バージョンから、
REFRESH句内でREFRESH ... PARALLEL nを使用してリフレッシュの並列度を指定できるようになりました。
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;