CREATE MATERIALIZED VIEW文は、SelectQuery
句で指定された表に対するビューを作成します。 ビューを作成するために使用された元の表は、ディテール表と呼ばれます。 ビューは、ディテール表の変更に関して、同期または非同期でリフレッシュされます。 非同期マテリアライズド・ビューを作成する場合は、まずディテール表にマテリアライズド・ビュー・ログを作成する必要があります。 「CREATE MATERIALIZED VIEW LOG」を参照してください。
必要な権限
CREATE MATERIALIZED VIEW(所有者の場合)またはCREATE ANY MATERIALIZED VIEW(非所有者の場合)および
ディテール表に対するSELECTおよび
CREATE TABLE(所有者の場合)またはCREATE ANY TABLE(非所有者の場合)
SQL構文
CREATE MATERIALIZED VIEWViewName
[REFRESH [FAST | COMPLETE] [NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral),IntervalUnit]] ASSelectQuery
[PRIMARY KEY (ColumnName
[,…])] [UNIQUE HASH ON (HashColumnName [,…]) PAGES =PrimaryPages
]
パラメータ
CREATE MATERIALIZED VIEW文には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
ViewName |
新しいビューに割り当てる名前。 |
REFRESH |
非同期マテリアライズド・ビューを指定します。 |
[FAST | COMPLETE] |
リフレッシュ方法。 FAST は、増分リフレッシュを指定します。 COMPLETE は、完全リフレッシュを指定します。 方法を省略した場合、COMPLETE がデフォルトのリフレッシュ方法です。 |
NEXT SYSDATE |
NUMTODSINTERVAL を指定せずにNEXT SYSDATE を指定した場合、マテリアライズド・ビューは、ディテール表が変更されるたびに増分リフレッシュされます。 リフレッシュは、ディテール表を変更するトランザクションがコミットされた直後に、別のトランザクションで実行されます。 ディテール表が変更されるたびに完全リフレッシュ(COMPLETE )を指定することはできません。
|
[+NUMTODSINTERVAL( IntegerLiteral), IntervalUnit ] |
このパラメータを指定した場合、マテリアライズド・ビューは指定した時間隔でリフレッシュされます。 IntegerLiteral は整数である必要があります。 IntervalUnit は、'DAY' 、'HOUR' 、'MINUTE' 、'SECOND' のいずれかの値である必要があります。
|
SelectQuery |
ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。 |
ColumnName |
作成されるビューの主キー列の名前を指定します。 主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。 |
HashColumnName |
ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。 |
PrimaryPages |
表の想定ページ数を指定します。この数によって、ハッシュ索引に対して作成されるハッシュ・バケットの数が決まります。最小値は1です。想定したページ数が少なすぎると、パフォーマンスが低下します。 詳細は、「CREATE TABLE」を参照してください。 |
説明
マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対してDELETE、UPDATEまたはINSERT文を実行することはできません。
マテリアライズド・ビューが更新されたときに、オーバーフローまたはアンダーフロー状態が発生するように指定されている場合、レプリケートされた表に定義されたマテリアライズド・ビューで、レプリケーション障害または非一貫性が発生する場合があります。
ディテール表はレプリケートできますが、マテリアライズド・ビュー自体はレプリケートできません。 ディテール表がレプリケートされると、対応するビューがTimesTenによって自動的に更新されます。
マテリアライズド・ビューとそのディテール表は、キャッシュ・グループの構成要素にすることはできません。
順序と同じ名前のマテリアライズド・ビューは作成しないでください。
マテリアライズド・ビューに対して参照制約は定義できません。
デフォルトでは、マテリアライズド・ビューで主キーを使用するために範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。
アプリケーションでマテリアライズド・ビューの主キーに対して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、マテリアライズド・ビューに対して範囲索引を選択してください。
主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。 UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。
主キーで使用する索引の変更、またはハッシュ索引のサイズ変更を行うには、ALTER TABLEを使用します。
ALTER TABLE文でマテリアライズド・ビューの列の追加または削除を行うことはできません。 マテリアライズド・ビューの構造を変更するには、ビューを削除してから再度作成します。
マテリアライズド・ビューを削除するには、DROP [MATERIALIZED] VIEW文を使用します。
マテリアライズド・ビューの定義に使用される問合せには、いくつかの制限があります。
マテリアライズド・ビュー定義のSELECT *問合せは、ビューの作成時に実行されます。 マテリアライズド・ビューの作成後にディテール表に追加された列は、マテリアライズド・ビューには反映されません。
一時表は、マテリアライズド・ビュー定義では使用できません。 非マテリアライズド・ビューおよび導出表は、マテリアライズド・ビューを定義するときに使用できません。
GROUP BYのリストに含まれるすべての列が、SELECT構文のリストに含まれている必要があります。
集計ビューのSELECT構文のリストに、COUNT(*)が含まれている必要があります。
SUMとCOUNTは使用可能です。ただし、AVGのように、それらを利用する式は使用できません。
次の句はマテリアライズド・ビューを作成するSELECT文で使用できません。
DISTINCT
FIRST
HAVING
ORDER BY
UNION
UNION ALL
MINUS
INTERSECT
JOIN
ユーザー関数: USER、CURRENT_USER、SESSION_USER
副問合せ
NEXTVALおよびCURRVAL
導出表および結合表
SELECT構文のリストの各式には、一意の名前が必要です。 列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。
SELECT FOR UPDATEまたはSELECT FOR INSERT文は、ビューでは使用できません。
各内部表は、1つの表との外部結合のみ可能です。
自己結合を使用できます。自己結合とは、表をその表自体に結合することです。この表はFROM句に2度現れ、その後ろに表の別名が続き、結合条件に使用する列名を修飾します。
完全(COMPLETE)リフレッシュでの非同期マテリアライズド・ビューには、その他の制限はありません。
増分(高速)リフレッシュで非同期マテリアライズド・ビューを作成する場合は、マテリアライズド・ビュー作成のSELECT文の制限以外に、次の制限が適用されます。
集計関数はサポートされません。
外部結合はサポートされません。
SELECT構文のリストに、すべてのディテール表のROWIDまたは主キー列が含まれている必要があります。
非同期マテリアライズド・ビューを作成する前に、増分リフレッシュでの非同期マテリアライズド・ビューの各ディテール表にマテリアライズド・ビュー・ログを作成する必要があります。
マテリアライズド・ビュー・ログに、非同期マテリアライズド・ビューで使用されるすべての列が含まれている必要があります。
TimesTenでは、増分リフレッシュされる非同期マテリアライズド・ビューに対して一意の索引が作成されます。 索引は、SELECT構文のリストに含まれるディテール表の主キーまたはROWIDに作成されます。
例
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 (x1) PAGES=100;
t1
表とt2
表のx1
およびy1
列の外部結合からマテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2 WHERE x1=x2(+);
増分リフレッシュでmv1
という名前の非同期マテリアライズド・ビューを作成します。 マテリアライズド・ビューは、employees
への更新がコミットされた直後にリフレッシュされます。 mv1
内の列は、employee_id
およびemail
です。 (非同期マテリアライズド・ビューを作成する前に、マテリアライズド・ビュー・ログを作成する必要があります。)
CREATE MATERALIZED VIEW mv1 REFRESH FAST NEXT SYSDATE AS SELECT employee_id, email FROM employees; 107 rows materialized.
関連項目