回答:
これらはSQL Serverではインデックス付きビューと呼ばれます。詳細については、以下のホワイトペーパーをご覧ください。
基本的に、あなたがする必要があるのは:
これで完了です。
トリッキーな部分は次のとおりです。ビューはかなりの数の制約と制限を満たさなければなりません-それらはホワイトペーパーで概説されています。これを行うと、それだけです。ビューは自動的に更新され、メンテナンスは必要ありません。
追加のリソース:
純粋にエンジニアリングの観点からですが、インデックス付きビューは誰もがパフォーマンスを向上させるために使用できるもののように聞こえますが、実際のシナリオは大きく異なります。インデックス付けできるものとできないものに対する制限が多すぎるため、最も必要な場所でインデックス付きビューを使用することに失敗しました。
ビューに外部結合がある場合、それらは使用できません。また、共通のテーブル式は許可されていません...実際、副選択または派生テーブル(partition by句を使用するなど)に順序付けがある場合も、運が悪いです。
インデックス付きビューを利用するのは非常に単純なシナリオだけですが、私の考えでは、いずれにしても、基になるテーブルに適切なインデックスを作成することで最適化できます。
人々が実際にインデックス付きビューを自分の利益のために使用し、それらなしでは実行できなかったいくつかの実際のシナリオを聞いてわくわくします
(NOEXPAND)
インデックス付きビューを使用するクエリにヒントを追加することを忘れないでください。そして、あなたは違いに気づきます。インデックス付きビューを使用することの利点は、「テーブルに適切にインデックスを付ける」ことと、レコードの選択を制限することです。
マテリアライズドビューが実際に何であるかについて、もう少し背景が必要になる場合があります。Oracleでは、これらは他の場所で構築しようとしたときにいくつかの要素で構成されるオブジェクトです。
MVIEWは基本的に、別のソースからのデータのスナップショットです。ビューとは異なり、ビューにクエリを実行してもデータは見つかりません。テーブルの形式でローカルに保存されます。MVIEWは、定期的に、またはソースデータが変更されたときに開始するバックグラウンドプロシージャを使用して更新されます。Oracleでは、完全または部分的な更新が可能です。
SQL Serverでは、以下を使用して、定期的に(完全に)更新する基本的なMVIEWを作成します。
まず、ビュー。ビューはどのデータベースでも非常に一般的であるため、これはほとんどの場合簡単です。次に、テーブルです。これは、列とデータのビューと同じでなければなりません。これは、ビューデータのスナップショットを格納します。次に、テーブルを切り捨て、ビューの現在のデータに基づいてテーブルを再読み込みするプロシージャ。最後に、プロシージャを開始するジョブを開始します。
それ以外はすべて実験です。
インデックス付きビューがオプションではなく、クイックアップデートが必要ない場合は、ハックキャッシュテーブルを作成できます。
select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...
次に、sp_rename view / table、またはそれを参照するクエリやその他のビューを変更して、キャッシュテーブルを指すようにします。
毎日/毎晩/毎週/更新しないようにスケジュールする
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
注意:これは、txログでもスペースを消費します。計算が遅い小さなデータセットに最適です。「簡単だが大きい」列を最初に外側のビューに表示しないようにリファクタリングするかもしれません。
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