説明
このステートメントは、マテリアライズドビューを作成するために使用されます。
マテリアライズドビューとは、クエリ結果のコピーを格納し、データを最新の状態に保つために定期的に(または手動で)更新される特殊なタイプのデータベースオブジェクトです。マテリアライズドビューには集計、結合、サブクエリなどの操作が含まれることがあり、さらにパフォーマンスを向上させるためにインデックスやパーティションを設定することも可能です。
権限要件
マテリアライズドビューを作成するには、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ステートメントを参照してください。
説明OceanBaseデータベースV4.3.5バージョンについて:
|
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:カスケード一貫性更新を示します。
説明
- OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP3バージョンからパラメータ
nested_refresh_option(ネストされたマテリアライズドビューの更新ポリシーを指定)サポートされています。 - ネストされていないマテリアライズドビューについては、カスケード更新動作は存在せず、どのような更新ポリシーを指定しても意味がなく、デフォルトで独立した更新が行われます。指定された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;