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


回答:


355

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

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


54
また、最新の状態である必要がないデータのパフォーマンスが必要な場合は、マテリアライズドビューの方が適していますが、データは標準ビューよりも古くなります。通常、BIレポートはマテリアライズドビューから多くのメリットを得ます。
Marthinus

29
@Marthinus-REFRESH ON COMMITであるマテリアライズドビューの場合を除いて正しい-MVは、コミットされたデータを正確に返します。
ジェフリーケンプ

2
DISKベースの意味は何ですか?テーブルがDISKの一部ではないということですか?それはファイルに格納されており、DISKアクセスはFileアクセスよりも高速です....?
Kanagavelu Sugumar 2014

1
@KanagaveluSugumarはい、実際のテーブルもディスクに書き込まれます。
dacracot 2014

5
@dacracotありがとう!DISKのDBテーブル以外のことを言っていると思います。このMVIEWは、すべての結合を解決することによってテーブルも維持します。そのため、ランタイムでは単一のテーブルアクセスで十分です。また、通常は通常のビューで行われる結合条件について、複数のテーブルをクエリする必要はありません。ありがとうございました!
Kanagavelu Sugumar 2014

332

ビュー

ビューが照会されたときに、ビュー定義の基になるテーブルのデータを評価します。これはテーブルの論理ビューであり、他にデータは保存されていません。

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

マテリアライズドビュー

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

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


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

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


マテリアライズドビューは、スナップショットアイソレーションと同様に、一貫した瞬間を保証するのにも役立ちます。


9
詳細な説明は+1ですが、クエリの書き換えの欠点は何ですか?クエリの書き換えによってOracleがクエリをさらに最適化できる場合は、常にクエリの書き換えを有効にする必要があります。
Rosdi Kasim、2010

6
@Rosdi氏は次のように述べています。「マテリアライズドビューから取得したデータは、マテリアライズドビューが最後に更新されたときと同じ最新のものです」
Jeffrey Kemp

49

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

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

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


マテリアライズドビューで指定できる「REFRESH ON COMMIT」オプションがあります
Hybris95

ありがとう!答えを更新します。この機能がいつOracleに追加されたか知っていますか?
エレミヤペシュカ2018年

20

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


DISKベースの意味は何ですか?テーブルがDISKの一部ではないということですか?それはファイルに格納されており、DISKアクセスはFileアクセスよりも高速です....?
Kanagavelu Sugumar 2014

18

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

非マテリアライズドビュー -基になるテーブルからデータをプルするクエリ


7

ビュー:ビューは単なる名前付きクエリです。何も保存していません。ビューにクエリがある場合、ビュー定義のクエリを実行します。実際のデータはテーブルから取得されます。

マテリアライズドビュー:データを物理的に保存し、定期的に更新します。MVのクエリ中に、MVからのデータを提供します。


2

マイク・マカリスターのかなり完全な答えに加えて...

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

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


マテリアライズドビューをサポートするテーブルは、ビューと同じ名前ではありません。
ジェフリーケンプ

@JeffreyKemp、よろしいですか?ここで受け入れられた答えは、stackoverflow.com / a / 33552513はそうではないと主張しています。そうですが、あなたがコメントしたとき、これは2010年に異なっていたかもしれません...
leqid

上記の私のコメントは、古いバージョン(おそらく9i)に関するものでした。そうです、MVは少なくとも最新バージョンでは同じ名前のテーブルを取得します。
ジェフリーケンプ

1

マテリアライズドビューは、選択クエリによって駆動されるデータの論理ビューですが、クエリの結果はテーブルまたはディスクに保存され、クエリの定義もデータベースに保存されます。

マテリアライズドビューのパフォーマンスはマテリアライズドビューのデータがテーブルに格納され、テーブルにインデックスが作成されるため結合の速度が上がるため、マテリアライズドビューのパフォーマンスはマテリアライズドビューの更新時に実行されるため、毎回起動する必要はありません。ビューの場合と同様に結合ステートメント。

その他の違いとしては、ビューの場合は常に最新のデータを取得しますが、マテリアライズドビューの場合は、ビューを更新して最新のデータを取得する必要があります。マテリアライズドビューの場合、MVを最新の状態に保つために追加のトリガーまたは自動メソッドが必要ですが、これはデータベース内のビューには必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.