回答:
マテリアライズドビューを使用する最大の利点の1つは、Oracleがデータの同期を維持することです。別の集計テーブルがある場合は、データの同期を維持する責任があります。一般に、適切な量のコードと十分な量のテストが必要であり、ほとんどの組織は、ミスを犯して、集計テーブルが同期しなくなるホールを残します。これは、集計テーブルの増分更新を実装しようとする場合に特に当てはまります。
もう1つの主な利点は、設定に応じて、ユーザーがベーステーブルに対してクエリを発行するときに、クエリリライトを使用してマテリアライズドビューを使用できることです。そのため、たとえば、日次、月次、年次の集計結果を生成する詳細テーブルに対する既存のレポートがたくさんある場合、日次レベルでデータを集計するマテリアライズドビューを作成でき、オプティマイザーはそのマテリアライズドビューを既存のすべてのクエリに使用します。これにより、新しい集計テーブルを使用したりDBMS_ADVANCED_REWRITE
、クエリの書き換えを強制的に行ったりするために多数のレポートを書き直そうとすることなく、データウェアハウスのレポートワークロードを最適化できます。
MVを使用する1つの良いケースは、データを集約し、大規模なテーブルからこのサマリー情報を頻繁かつ迅速に取得したい場合があることです。マテリアライズドビューがない場合、テーブルの一部を非正規化し、コードを介して集計を維持するか、大きな行セットを繰り返しスキャンする必要があります。ダッシュボードや同様のオンラインアプリケーションでは、どちらの方法も特別に受け入れられるとは限りません。結果を別のテーブルに保存すると、アプリケーションコードが複雑になり、@ Justin Caveが言うように、手動で集約されたデータが同期していることを確認する責任があります。元のテーブルのデータを使用します。
マテリアライズドビューに直接移動する代わりに、ビューについて説明します。
基本的に、ビューはテーブルとは異なり論理的に存在します。特定の列をユーザーに対して非表示にする場合、テーブルを使用することはできません。ビューを作成すると、セキュリティを実現できます。
ユースケース:ビューがグループ化とともに10個のテーブルと内部的に関連付けられており、関数に数百万行がある場合、実行に時間がかかります。
マテリアライズドビューは、データの取得を高速化するのに役立ちます。マテリアライズドビューは物理的にデータベースに存在します。ベーステーブルが更新されるたびに、マテリアライズドビューが更新されます。
マテリアライズドビューは、クエリ定義に基づいて定期的に更新されますが、テーブルではこれを実行できません。
マテリアライズドビューは、クエリの結果を含むデータベースオブジェクトです。それらは、リモートにあるデータのローカルコピーであるか、テーブルのデータの集計に基づいてサマリーテーブルを作成するために使用されます。 http://www.oraappdata.com/2016/04/materialized-view.html
ON DEMAND
がデフォルトのリフレッシュ動作であることに注意してください。マテリアライズドビューはで作成する必要がありますON COMMIT
。マテリアライズドビューの維持は無料ではありません。ただし、おそらくトリガーよりも安価です。