web-dev-qa-db-ja.com

マテリアライズドビューの代わりにテーブルを使用しないのはなぜですか?

Oracleデータベースは初めてです。私が正しく理解している場合、マテリアライズドビューは、結果セットがデータベースの物理テーブルとして保存され、このビュー/テーブルはいくつかのパラメーターに基づいて更新されるビューです。ビューが物理テーブルとして保存されている場合、最初にデータをテーブルに保存してみませんか?では、テーブルの代わりにマテリアライズドビューを使用する利点は何ですか?

55
jrara

マテリアライズドビューを使用する最大の利点の1つは、Oracleがデータの同期を維持することです。別の集計テーブルがある場合は、データの同期を維持する必要があります。これには通常、適度な量のコードと適切な量のテストが必要であり、ほとんどの組織はミスを犯して、集計テーブルが同期されない原因となる穴を残しています。これは、集計テーブルの増分更新を実装しようとする場合に特に当てはまります。

別の主な利点は、設定に応じて、ユーザーがベーステーブルに対してクエリを発行するときに、クエリの書き換えを使用してマテリアライズドビューを使用できることです。したがって、たとえば、日次、月次、および年次の集計結果を生成する詳細テーブルに対する既存のレポートがたくさんある場合、データを日次レベルで集計するベーステーブルにマテリアライズドビューを作成すると、オプティマイザはそのマテリアライズドビューを既存のすべてのクエリに利用します。これにより、新しい集計テーブルを使用したり、DBMS_ADVANCED_REWRITEを使用して、クエリを独自に書き換えます。

60
Justin Cave

マテリアライズドビューは、ベーステーブルが更新されると自動的に更新されます。

14
Gordon Bell

MVを使用する良い例の1つは、データを集約し、大きなテーブルからこの要約情報を頻繁かつ迅速に取得したい場合です。マテリアライズドビューがない場合、いくつかのテーブルを非正規化し、コードを介して集計を維持するか、行の大きなセットを繰り返しスキャンする必要があります。どちらの方法も、ダッシュボードや同様のオンラインアプリケーションでは特に受け入れられない場合があります。結果を別のテーブルに保存すると、アプリケーションコードが複雑になり、@ Justin Caveが言うように、手動で集計されたデータが同期していることを確認する責任があります。元のテーブルのデータ。

10
NoChance

オラクルの人ではありませんが、別のユースケースはサードパーティのソリューションです。それらは通常、設計の変更をサポートしていませんが、MVはコードから「見えない」が、カスタムレポート/データ抽出へのアクセスを提供します。

ストレージコストと潜在的に影響のある挿入/更新時間のコストがかかるという点で無料ではありませんが、マテリアライズドデータの取得と「ストレートビュー」の比較、または実際のテーブルの作成と周囲のETLの維持に費やされる時間によって相殺される場合があります。

最後に、これを行うと、ベンダーとのサポート契約が無効になる場合があります。consult-your-lawyer-blah-blah-blah

4
billinkc

Materialized viewsに直接アクセスする代わりに、Viewsについて説明させてください。

基本的に、ビューはテーブルとは論理的に異なります。ユーザーに対して特定の列を非表示にする場合、テーブルを使用することはできません。セキュリティを実現できるビューを作成します。

ユースケース:ビューがgroup byとともに10個のテーブルと内部的に関連付けられており、関数に数百万の行がある場合、実行に時間がかかります。

したがって、マテリアライズドビューは、データをより速く取得するのに役立ちます。マテリアライズドビューは物理的にデータベースに存在します。ベーステーブルが更新されるたびに、マテリアライズドビューが更新されます。

マテリアライズドビューはクエリ定義に基づいて定期的に更新され、テーブルはこれを行うことができません。

2
Premraj

マテリアライズドビューは、クエリの結果を含むデータベースオブジェクトです。これらはリモートにあるデータのローカルコピーであるか、テーブルのデータの集計に基づいてサマリーテーブルを作成するために使用されます。 http://www.oraappdata.com/2016/04/materialized-view.html

0
Dayakark

マテリアライズドビューは、定期的に自動的に更新されるように設定できます。テーブルでは、データを切り捨て/再ロードするために追加のコードが必要になる場合があります。

例:複数のテーブルからのデータを持つマテリアライズドビューは、非ピーク時に自動的に更新されるように設定できます。物理テーブルでは、データを切り捨てたり再ロードしたりするために追加のコードが必要になります。

セキュリティは、テーブルではなくマテリアライズドビューでより適切に制御できます。

0
samroze