web-dev-qa-db-ja.com

Oracleのビューとマテリアライズドビューの違いは何ですか?

Oracleのビューとマテリアライズドビューの違いは何ですか?

321
juan

マテリアライズドビューはディスクベースであり、クエリ定義に基づいて定期的に更新されます。

ビューは仮想的なもので、アクセスされるたびにクエリ定義を実行します。

332
dacracot

視聴回数

ビュー定義の基礎となるテーブル内のデータを評価しますビューがクエリされたとき。これはテーブルの論理ビューであり、他のどこにもデータは保存されません。

ビューの利点は、常に最新のデータを返すであることです。 ビューの欠点は、そのパフォーマンスは、そのビューが基づいているselect文の良さによって異なります。ビューで使用されるselectステートメントが多くのテーブルを結合する場合、またはインデックス化されていない列に基づく結合を使用する場合、ビューのパフォーマンスが低下する可能性があります。

マテリアライズドビュー

それらは(selectステートメントに基づく)データの論理ビューであるという点で通常のビューと似ていますが、基になるクエリ結果セットがテーブルに保存されましたです。これの利点は、マテリアライズドビューをクエリするときに、テーブルをクエリしているであり、これもインデックス化される可能性があることです。

さらに、すべての結合はマテリアライズドビューの更新時に解決されているため、マテリアライズドビューから選択するたびにではなく、(またはマテリアライズドビューを更新するたびに)結合の料金を支払います。さらに、クエリの書き換えを有効にすると、Oracleはマテリアライズドビューのソースから選択するクエリを最適化して、代わりにマテリアライズドビューから読み取ることができます。マテリアライズドビューを集計テーブルの形式として、または頻繁に実行されるクエリのコピーとして作成する状況では、これによりエンドユーザーアプリケーションの応答時間を大幅に短縮できます。 マイナス面は、マテリアライズドビューから取得するデータが、マテリアライズドビューが最後に更新されたときと同じくらい最新であることです


マテリアライズドビューは、手動で、設定されたスケジュールで、または基になるテーブルの1つからのデータの変更を検出するデータベースに基づいて更新するように設定できますマテリアライズドビューは、マテリアライズドビューログと組み合わせることにより、増分更新できます。マテリアライズドビューログは、基礎となるテーブルで変更データキャプチャソースとして機能です。

マテリアライズドビューは、データウェアハウジング/ビジネスインテリジェンスアプリケーションで最も頻繁に使用され、数千万行の大きなファクトテーブルを照会すると、応答時間が長くなり、アプリケーションが使用できなくなります。


マテリアライズドビューは、 snapshot isolation と同様に、一定の瞬間を保証するのにも役立ちます。

320
Mike McAllister

ビューは、基になるテーブルからデータを取得するためにクエリを使用します。

マテリアライズドビューは、クエリの結果セットを含むディスク上のテーブルです。

マテリアライズドビューは、主に、インデックスを適用した標準ビューを使用することが不可能または望ましくない場合にアプリケーションのパフォーマンスを向上させるために使用されます。マテリアライズドビューは、トリガを介して、またはON COMMIT REFRESHオプションを使用して、定期的に更新できます。これにはいくつかの追加の権限が必要ですが、複雑なことは何もありません。 ON COMMIT REFRESHは少なくともOracle 10から導入されています。

47

ビューは基本的に論理的なテーブルのような構造で、指定されたクエリによってその場で読み込まれます。ビュークエリの結果はディスクのどこにも保存されず、クエリが実行されるたびにビューが再作成されます。マテリアライズドビューは、データベース内に格納され、ディスクに書き込まれる実際の構造です。作成時に定義されたパラメータに基づいて更新されます。

17
user12786

マテリアライズドビュー - クエリの結果セットを含むディスク上のテーブル

ノンマテリアライズドビュー - 基礎となるテーブルからデータを取得するクエリ

16
fn27

表示: 表示は名前付きクエリです。何も格納していません。ビューにクエリがあると、ビュー定義のクエリが実行されます。実際のデータはテーブルから取得されます。

マテリアライズドビュー: データを物理的に格納し、定期的に更新されます。 MVに問い合わせている間、それはMVからのデータを与えます。

2
smshafiqulislam

Mike McAllisterのかなり徹底的な答えに加えて...

マテリアライズドビューは、ビュークエリが単純コンパイラによって考慮される場合)変更を検出するデータベースを介してのみ自動的にを更新するように設定できます。 mviewテーブル内の変更された行のみを更新するために、ソーステーブル内の変更を追跡するための本質的に内部的なトリガーです。

マテリアライズドビューを作成すると、Oracleがmview および同じ名前のテーブルとして)の両方を作成するため、混乱を招く可能性があります。

1
Stew S

view はSQLクエリに他なりません。クエリの出力を受け取り、仮想テーブルのように表示します。仮想テーブルは、記憶領域を占有したりデータを含んだりしません

しかし、 マテリアライズドビュー はスキーマオブジェクトであり、クエリの結果を別のスキーマオブジェクトに格納します(つまり、記憶領域を占有し、データを含みます)。これは、マテリアライズドビューがテーブルデータの物理的に別のコピーを返していることを示します。

1
Dlucidone