マテリアライズドビューは特殊なビューであり、クエリ結果のコピーを格納し、データの最新状態を維持するために定期的に(または手動で)更新されます。通常のビュー(仮想テーブルで、アクセスするたびに再計算が必要)とは異なり、マテリアライズドビューにはデータの物理コピーが含まれているため、複雑な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操作はサポートされていません。