CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューを作成するために使用された元の表は、ディテール表と呼ばれます。ビューは、ディテール表の変更に関して、同期でリフレッシュされます。
必要な権限
文を実行するユーザーには、CREATE MATERIALIZED VIEW(所有者の場合)またはCREATE ANY MATERIALIZED VIEW (非所有者の場合)権限が必要です。
- ディテール表の
SELECT権限。 CREATETABLE権限。
TimesTen Scaleoutでの使用
この文は、TimesTen Scaleoutでサポートされています。DISTRIBUTE BY HASH句を指定し、分散キーを定義する必要があります。DISTRIBUTE BY REFERENCE句およびDUPLICATE句はサポートされていません。
SQL構文: TimesTen Scaleout
CREATE MATERIALIZED VIEW [Owner.]ViewNameDISTRIBUTE BY HASH (ColumnName[,...]) ASSelectQuery[PRIMARY KEY (ColumnName[,...])] [UNIQUE HASH ON (HashColumnName[,...]) PAGES =PrimaryPages]
SQL構文: TimesTen Classic
CREATE MATERIALIZED VIEW [Owner.]ViewNameASSelectQuery[PRIMARY KEY (ColumnName[,...])] [UNIQUE HASH ON (HashColumnName [,...]) PAGES =PrimaryPages]
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
新しいビューに割り当てる名前。 |
|
|
TimesTen Scaleoutのみです。 ハッシュによってディテール表を分散する必要があります。
この句は、 |
|
|
ビューで使用される、ディテール表の列を選択します。 |
|
|
作成されるビューの主キー列の名前を指定します。主キーには最大32列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。 |
|
|
表のハッシュ索引。一意のハッシュ索引のみが作成されます。このパラメータは、等価条件に使用します。 |
|
|
ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。 |
|
|
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。
ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。 |
CREATE MATERIALIZED VIEWの説明および制限: TimesTen Scaleout
説明および制限を次に示します。
-
マテリアライズド・ビューを使用すると問合せの実行時間が改善することが期待される場合、SQLオプティマイザは、ベース表に対する問合せをリライトして使用可能なマテリアライズド・ビューを使用することがあります。
-
DISTRIBUTEBYHASH句を指定する必要があり、これは、分散キーを使用して指定する必要があります(主キーを指定し、主キーを分散キーとして使用する場合であっても)。 -
ASSelectQuery句の前にDISTRIBUTEBYHASH句を指定する必要があります。 -
DISTRIBUTEBYHASH句のみ指定できます。DISTRIBUTEBYREFERENCE句およびDUPLICATE句はサポートされていません。 -
SelectQueryは単一表SELECT文に制限する必要があります。 -
SelectQueryではGROUPBYまたはWHERE句を指定できません。 -
SelectQueryではSQL関数を使用できません。 -
SelectQueryでは式を使用できません。 -
マテリアライズド・ビューのディテール表ではカスケード削除句を含む外部キーは使用できません。
-
分散キー列は、
SelectQueryの投影リストに含まれている必要があります。 -
DDLはリライトされません。たとえば、ディテール表に一意の索引を作成した場合、(一意列に分散されている)マテリアライズド・ビューに対応する索引は作成されません。
説明: TimesTen ScaleoutおよびTimesTen Classic
問合せの定義について、次の制限事項および要件があります。
-
SELECT構文のリストの各式には、一意の名前が必要です。
-
非マテリアライズド・ビューを使用してマテリアライズド・ビューを定義しないでください。
-
マテリアライズド・ビュー問合せの選択リストの列に
CLOB、BLOB、またはNCLOBデータ型を定義しないでください。 -
ディテール表はキャッシュ・グループに属すことができず、ディテール表は圧縮を使用できません。
-
SELECTFORUPDATE.は使用しないでください。 -
システム表またはシステム・ビューを参照しないでください。
-
マテリアライズド・ビューでネストされた定義を使用しないでください。
-
動的パラメータを使用しないでください。
-
ROWNUMを使用しないでください。 -
分析関数を使用しないでください。
-
GROUPINGSETS、ROLLUP、またはCUBEを使用しないでください。 -
SYSDATEファンクションを使用しないでください。 -
SYSTEM_USERファンクション、USERファンクション、CURRENT_USERファンクション、またはSESSION_USERファンクションを使用しないでください。 -
NEXTVALまたはCURRVALを使用しないでください。 -
OUTER JOINは使用できますが、選択リストは、外部結合に指定した各内部表に1つ以上のNULL値可能でない列を投影する必要があります。
-
WITHsubquery句は使用しないでください。
次の制限事項(問合せの定義を除く)があります。
-
マテリアライズド・ビューの列の集計がある、ハッシュ・ベースの主キーを使用しないでください。
-
マテリアライズド・ビューは、TimesTenレプリケーションを使用して直接レプリケートできません。ディテール表はレプリケートできます。レプリケートの両側で同じマテリアライズド・ビューを定義する必要があります。TimesTenでは、該当するマテリアライズド・ビューが自動的に更新されます。
-
参照元または参照先の表がマテリアライズド・ビューの場合は、外部キーを定義できません。
問合せの定義に関する次の制限事項および要件があります。
-
ビューの定義には、選択リストのGROUP BYリストのすべての列が含まれる必要があります。
-
集約ビューには、選択リストの
COUNT (*)またはCOUNT(NULL値不可の列)が含まれる必要があります。 -
導出表または
JOIN表を使用しないでください。 -
SELECTDISTINCTファンクションまたは集計DISTINCTファンクションを使用しないでください。 -
集合演算子
UNION、INTERSECTまたはMINUSを使用しないでください。 -
NULL値可能な式の
SUMを使用しないでください。 -
単純な列のみをGROUP BY列として使用してください。
-
GROUP BY列は自己結合表に属することができません。
-
次の句を使用しないでください。
-
HAVING -
ORDERBY -
DISTINCT -
FIRST -
JOIN
-
-
TT_HASHファンクションを使用しないでください。 -
SUMおよびCOUNTを使用できますが、SUMおよびCOUNTを含む式は使用しないでください。SUM/COUNTとして処理されるAVGを使用しないでください。 -
選択リストで
MINファンクションまたはMAXファンクションを指定しないでください。 -
結合の場合:
-
結合述語に
ORを使用できません。 -
デカルト積の結合(結合述語のない結合)を指定しないでください。
-
外部結合では、各内部表を1つ以上の表に外部結合します。
-
その他の考慮事項は、次のとおりです:
-
マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対して
DELETE、UPDATEまたはINSERT文を実行することはできません。 -
デフォルトでは、マテリアライズド・ビューで主キーを使用するために範囲索引が作成されます。かわりに
UNIQUE HASH句を使用して、主キーに対してハッシュ索引を指定できます。-
アプリケーションでマテリアライズド・ビューの主キーに対して範囲問合せを実行する場合は、
UNIQUE HASH句を省略して、マテリアライズド・ビューに対して範囲索引を選択してください。 -
主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、
UNIQUE HASH句を指定します。UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。
-
-
主キーで使用する索引の変更、またはハッシュ索引のサイズ変更を行うには、
ALTER TABLEを使用できます。 -
ALTER TABLE文でマテリアライズド・ビューの列の追加または削除を行うことはできません。マテリアライズド・ビューの構造を変更するには、ビューを削除してから再度作成します。 -
マテリアライズド・ビューの索引は、
CREATE INDEXSQL文を使用して作成できます。
マテリアライズド・ビューの所有者には、ディテール表に対するSELECT権限が必要です。SELECT権限は、SELECT ANY TABLEおよびADMINシステム権限によって暗黙的に指定されます。ディテール表に対するSELECT権限またはそれ以上のレベルのシステム権限がマテリアライズド・ビューの所有者から削除されると、マテリアライズド・ビューは無効になります。
無効なマテリアライズド・ビューから選択すると、エラーを伴って失敗します。無効なマテリアライズド・ビューのディテール表を更新しても、そのマテリアライズド・ビューは更新されません。
無効なマテリアライズド・ビューを識別するには、ttIsql describeコマンドを使用し、SYS.DBA_OBJECTS、SYS.ALL_OBJECTSまたはSYS.USER_OBJECTSシステム表のSTATUS列を調べます。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』を参照してください。
削除された権限が回復されると、マテリアライズド・ビューを削除して再作成することで、無効なマテリアライズド・ビューを再度有効にすることができます。
詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』の「マテリアライズド・ビューのオブジェクト権限」を参照してください。
CREATE MATERIALIZED VIEWの例: TimesTen Scaleout
構文の例:
Command> CREATE MATERIALIZED VIEW mv
DISTRIBUTE BY HASH (phone)
AS SELECT phone FROM accounts;
1010 rows materialized.
例: TimesTen Classic
customer表とbookorder表の列からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW custorder AS SELECT custno, custname, ordno, book FROM customer, bookorder WHERE customer.custno=bookorder.custno;
t1表のx1およびy1列からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW v1 AS SELECT x1, y1 FROM t1 PRIMARY KEY (x1) UNIQUE HASH ON (x1) PAGES=100;
t1表とt2表のx1およびy1列の外部結合からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2 WHERE x1=x2(+);
次の例では、表employeesから選択された列employee_idおよびemailに基づいて、マテリアライズド・ビューempmatview2を作成します。マテリアライズド・ビューの作成後、マテリアライズド・ビューempmatview2の列mvemp_idに索引を作成します。
CREATE MATERIALIZED VIEW empmatview2
AS SELECT employee_id mvemp_id, email mvemail
FROM employees;
107 rows materialized.
CREATE INDEX empmvindex ON empmatview2 (mvemp_id);