マテリアライズドビューは特殊なビューであり、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)リフレッシュします。通常のビュー(仮想テーブルで、アクセスするたびに再計算が必要)とは異なり、マテリアライズドビューにはデータの物理コピーが含まれているため、複雑なSQLクエリを実行することなく直接データを照会できます。これにより、クエリ性能が大幅に向上し、空間と時間のトレードオフによってクエリが高速化されます。
機能と特徴
マテリアライズドビューのタイプ
非リアルタイムマテリアライズドビュー
非リアルタイムマテリアライズドビューは、その名の通り、格納されている結果セットが最新ではありません。ベーステーブルが更新されるたびに即座にマテリアライズドビューを更新するわけではなく、予定された時間間隔で、または手動でトリガーされてリフレッシュされます。マテリアライズドビューをクエリする際には、実際に物理的に保存されているデータのみが照会されます。この方式は、データの鮮度に対する要求は高くないものの、クエリ性能に対する要求が高いシナリオに適しています。
リアルタイムマテリアライズドビュー
リアルタイムマテリアライズドビューは、リアルタイムデータの取得をサポートするデータベースオブジェクトです。mlogのメカニズムを使用して基盤となるベーステーブルの変更をキャプチャおよび処理することで、マテリアライズドビュー内のデータが常に最新の状態を反映するようにします。クエリ実行時、リアルタイムマテリアライズドビューはオンラインでこれらの変更を即座に統合し、更新後のデータをユーザーに表示します。このように、マテリアライズドビューが物理的に最新のデータを格納していなくても、ユーザーはリアルタイムで更新されたクエリ結果を得ることができます。
マテリアライズドビューのリフレッシュ戦略
OceanBaseデータベースのマテリアライズドビューは、フルリフレッシュ、増分リフレッシュ(高速リフレッシュ)、ハイブリッドリフレッシュ、および決してリフレッシュしないの4種類のリフレッシュ戦略をサポートしています。詳細は以下の通りです:
フルリフレッシュ
フルリフレッシュは比較的直接的な方法で、リフレッシュ操作を実行するたびに、システムはマテリアライズドビューに対応するクエリステートメントを再実行し、既存のビュー結果データを完全に計算して上書きします。この方式は、データ量が比較的小さいシナリオに適しています。
増分リフレッシュ
増分リフレッシュでは、前回のリフレッシュ以降に変更された部分のみを処理します。正確な増分リフレッシュを実現するために、OceanBaseはOracle MLOG(Materialized View Log)に類似したマテリアライズドビューのログ機能を実装しています。ログを通じて基礎テーブルの増分更新データを詳細に追跡・記録することで、マテリアライズドビューの高速な増分リフレッシュを保証します。増分リフレッシュ方式は、特にデータ量が膨大で変更頻度が高い業務シナリオに適しています。
ハイブリッドリフレッシュ
まず増分リフレッシュを試み、増分リフレッシュが失敗した場合にフルリフレッシュを実行します。
決してリフレッシュしない
マテリアライズドビューは作成時に一度だけリフレッシュされ、作成後は再度リフレッシュすることは許可されません。
マテリアライズドビューのリフレッシュ方法
OceanBaseデータベースのマテリアライズドビューのリフレッシュ方法には、自動リフレッシュと手動リフレッシュが含まれます。
自動リフレッシュ
マテリアライズドビューを作成する際には、更新のタイミングを設定し、自動更新の時間間隔を設定できます。
START WITH datetime_exprおよびNEXT datetime_expr句を指定することで、マテリアライズドビューのバックグラウンドでの自動更新スケジュールのタイミングを設定できます。手動更新
マテリアライズドビューで自動更新が設定されていない場合、または自動更新の間隔が長い場合は、
DBMS_MVIEW.REFRESHパッケージを使用して手動で更新し、マテリアライズドビューのデータとベーステーブルのデータを同期状態に保つことができます。
マテリアライズドビューによるクエリの高速化
クエリのリライト
マテリアライズドビューを作成する際に
ENABLE QUERY REWRITEを指定することで、マテリアライズドビューの自動リライト機能を有効にできます。これにより、システムは元のテーブルに対するクエリをマテリアライズドビューに対するクエリにリライトし、業務上の変更量を削減できます。インデックスの使用
自身の業務ニーズに応じて、特定のフィールドにインデックスを作成することで、それらのフィールドに対するクエリの速度を向上させることができます。
データストレージ形式の選択
OceanBaseデータベースは、行ストレージ形式と列ストレージ形式のマテリアライズドビューをサポートしており、マテリアライズドビュー参照を含む複雑な分析シナリオでより優れたクエリパフォーマンスを実現します。
主キーの使用
ユーザーはマテリアライズドビューに主キーを指定することができ、主キーに基づく単一行検索、範囲検索、または関連シナリオのパフォーマンスを最適化できます。
パーティションの使用
マテリアライズドビューを作成する際には、テーブルオプションを設定し、データ特性とアクセスパターンに基づいて適切なパーティションオプションを設計・構成することで、クエリパフォーマンスと管理効率を向上させることができます。
適用シナリオ
マテリアライズドビューは、特に大量のデータや複雑なクエリを処理する際のクエリパフォーマンス最適化に利用されます。ビューのクエリ結果を事前計算・保存することで、リアルタイム計算を削減し、クエリパフォーマンスを向上させ、複雑なクエリロジックを簡略化します。これは、レポートの迅速な生成やデータ分析シナリオで広く用いられています。
- 同一データの頻繁なクエリ:マテリアライズドビューは、繰り返し計算が必要でリソース消費の多い複雑なクエリを格納するのに適しており、毎回のクエリごとに繰り返し計算を行うことなく、クエリ効率を向上させます。
- データの事前集計:日次、週次、月次の販売データやユーザー行動データの集計など、レポート生成やデータ分析などのシナリオでは、マテリアライズドビューを利用して集計データを事前計算・保存し、リアルタイム計算にかかる時間を短縮できます。
- 大規模データ量の分析:データ量が多い業務では、クエリは通常時間がかかります。マテリアライズドビューを利用することで、元のデータに対する大量のスキャンを回避できます。
- リアルタイム分析:リアルタイム性が求められる業務では、リアルタイムマテリアライズドビューを利用してクエリを高速化し、業務のリアルタイム要件を満たすことができます。
- 多次元データ分析:マテリアライズドビューを利用して、さまざまな次元の組み合わせにおける集計データを事前計算し、迅速な多次元クエリ応答を提供します。
注意点
- ストレージコスト:マテリアライズドビューは追加のストレージ容量を消費するため、ディスク容量を考慮する必要があります。
- 更新(メンテナンス)コスト:マテリアライズドビューの自動または手動更新はシステムリソースを消費するため、ベーステーブルのデータ変更が頻繁な場合、更新操作がシステムパフォーマンスに影響を与える可能性があります。
- データの一貫性とリアルタイム性:マテリアライズドビュー内のデータはリアルタイムではない場合があり、元のデータが更新されても自動的に更新されません。ベーステーブルのデータに変更があった場合、ビュー内のデータが古くなる可能性があるため、データの一貫性を保つために定期的な更新が必要です。
- 設計の複雑さ:マテリアライズドビューの設計と作成では、期待されるクエリパターンとデータアクセスパターンを慎重に検討し、最適なパフォーマンス最適化を実現する必要があります。
マテリアライズドビューのベーステーブル
データベースにおいて、マテリアライズドビューのベーステーブルとは、そのマテリアライズドビューを作成する際に参照された元のテーブルまたはビューを指します。
タイプ |
ベーステーブルとして使用できるか |
|---|---|
| 通常テーブル | はい |
| マテリアライズドビュー | はい |
| 通常ビュー | はい
説明OceanBaseデータベースでは、通常ビューを次元テーブルとして宣言する( |
| シノニム | いいえ |
| 外部テーブル | はい
説明OceanBaseデータベースでは、外部テーブルをマテリアライズドビューのベーステーブルとして使用し、フル更新のマテリアライズドビューを作成できます。 |
使用制限
マテリアライズドビューに対して、データの追加(INSERT)、削除(DELETE)、または定義の変更(ALTER)を行うことはできません。
マテリアライズドビューのベーステーブルに対してDDL操作を実行すると、マテリアライズドビューが期待されたパターンで更新できなくなる可能性があります。
- フル更新の場合、マテリアライズドビューとベーステーブルの対応する列の型が一致していれば更新できます。
- 増分更新の場合、ベーステーブルにマテリアライズドビューのログを作成するか(またはマテリアライズドビューのログの自動管理機能を有効にする必要があります)。
マテリアライズドビューはXML型をサポートしていません。
マテリアライズドビューはテーブルレベルの復元をサポートしていません。
マテリアライズドビューを個別に削除する場合、マテリアライズドビューはごみ箱に入りません。
drop databaseの際にはdatabaseと共にごみ箱に入ります。マテリアライズドビューに主キーを指定した後、マテリアライズドビューのデータをメンテナンス/更新する際に、データが主キー制約を満たさない場合、ビューのメンテナンスに失敗します。例えば、
CREATE MATERIALIZED VIEW mv1(PRIMARY KEY(c1)) AS SELECT c1 FROM t1;でマテリアライズドビューmv1を作成する際、t1のc1列にnull値が存在すると、マテリアライズドビューのデータを作成・メンテナンスする際にエラーが発生します。
操作権限
- マテリアライズドビューの作成には
CREATE TABLE権限が必要です。 - マテリアライズドビューの削除には
DROP TABLE権限が必要です。 - フル更新にはすべてのベーステーブルに対する
SELECT権限が必要です。 - 増分更新にはすべてのベーステーブルに対する
SELECT権限および対応するマテリアライズドビューのログに対するSELECT権限が必要です。 - マテリアライズドビューに付与できる権限は
SELECTのみです。その他のDML操作はサポートされていません。