116

私はデータ ウェアハウスを設計しようとしていますが、マテリアライズド ビューについて聞いたことがあります。実際にビューを作成したいのですが、ベーステーブルが変更されると自動的に更新されるはずです。誰でもクエリの例で説明できますか?

4

5 に答える 5

159

これらは、SQL Server ではインデックス付きビューと呼ばれます。背景については、次のホワイト ペーパーを参照してください。

基本的に、必要なことは次のとおりです。

  • 通常のビューを作成する
  • そのビューにクラスター化インデックスを作成する

これで完了です。

注意が必要なのは、ビューがかなりの数の制約と制限を満たさなければならないことです。これらはホワイト ペーパーで概説されています。これができたら、あとはこれだけです。ビューは自動的に更新され、メンテナンスは不要です。

その他のリソース:

于 2010-10-21T10:39:32.557 に答える
46

純粋にエンジニアリングの観点からですが、インデックス付きビューはパフォーマンスを向上させるために誰もが使用できるもののように聞こえますが、実際のシナリオは大きく異なります。インデックスを作成できるものとできないものに関する制限が多すぎるため、最も必要な場所でインデックス付きビューを使用することに失敗しました。

ビューに外部結合がある場合、それらは使用できません。また、一般的なテーブル式は許可されていません...実際、サブセレクトまたは派生テーブル (partition by 句など) で順序付けがある場合も、運が悪いです。

これにより、インデックス付きビューを利用する非常に単純なシナリオのみが残ります。私の意見では、基礎となるテーブルに適切なインデックスを作成することで最適化できます。

人々が実際にインデックス付きビューを使用して利益を得ており、それなしではできなかったいくつかの実際のシナリオを聞いて興奮します.

于 2013-06-16T19:41:07.687 に答える
20

具体化されたビューが実際に何であるかについて、もう少し背景が必要になる場合があります。Oracle では、これらは他の場所で構築しようとすると、いくつかの要素で構成されるオブジェクトです。

MVIEW は基本的に、別のソースからのデータのスナップショットです。ビューとは異なり、テーブルの形式でローカルに保存されているビューにクエリを実行しても、データは見つかりません。MVIEW は、一定の間隔で、またはソース データが変更されたときに開始されるバックグラウンド プロシージャを使用して更新されます。Oracle では、完全または部分的な更新が可能です。

SQL Server では、以下を使用して基本的な MVIEW を作成し、定期的に (完全に) 更新します。

まず、ビュー。ビューはどのデータベースでも非常に一般的であるため、これはほとんどの人にとって簡単なはずです。次に、テーブルです。これは、列とデータのビューと同じである必要があります。これにより、ビュー データのスナップショットが保存されます。次に、テーブルを切り捨て、ビュー内の現在のデータに基づいて再ロードするプロシージャ。最後に、作業を開始する手順をトリガーするジョブ。

他のすべては実験です。

于 2014-04-24T18:45:04.663 に答える
2

MS T-SQL Server の場合、「include」ステートメントを使用してインデックスを作成することを検討することをお勧めします。一意性は必要ありません。クラスター化インデックスに関連付けられたデータの物理的な並べ替えも必要ありません。「Index ... Include ()」は、システムによって自動的に維持される個別の物理データ ストレージを作成します。概念的には、Oracle マテリアライズド ビューに非常に似ています。

https://msdn.microsoft.com/en-us/library/ms190806.aspx

https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx

于 2016-06-23T16:21:51.757 に答える