6

私は SQL Server 2000 を使用していますが、インデックス付きビューの使用を開始するのをためらっています (毎日のパフォーマンス値を含むテーブルがあり、多くの数学関数でそれらをスコアリングする必要があります)。

(パフォーマンス テーブルを使用して) インデックス付きビューを作成し、パフォーマンス テーブルに新しい行を追加した場合、ビューのインデックスはすぐに更新されますか?それともビューの最初のユーザー要求で更新されますか?

4

1 に答える 1

8

インデックス付きビューは、基になるベース テーブルに影響を与えるクエリの一部として自動的に維持されます。

これが、インデックス付きビューに含めることができるものに非常に多くの制限がある理由です。制限が存在するのは、(潜在的に) 再スキャンする必要がなく、ベース テーブルで影響を受ける行に基づいてビューを更新できるようにするためです。ビューに含まれる行を決定するために、テーブル全体を調べます。


INSERTこれは、次のクエリのクエリ プランを調べることでも確認できます。

create table dbo.T (ID int not null)
go
create view dbo.V 
with schemabinding
as
    select ID from dbo.T
go
create unique clustered index I on dbo.V(ID)
go
insert into T(ID) values (1)

計画insert into T(ID) values (1)は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、プランにはIviewのインデックスへの挿入が含まれていますV


上記は 2000 よりも新しいバージョンの SQL Server で行われました (サポートされていないバージョンが潜んでいるわけではありません) が、これらは常に機能していました。2000 年版のドキュメントでも、この制限について言及されています。

クラスター化インデックスの作成後、ビューのベース データを変更しようとする接続には、インデックスの作成に必要な同じオプション設定も必要です。ステートメントを実行する接続に適切なオプション設定がない場合、SQL Server はエラーを生成し、ビューの結果セットに影響を与えるINSERTUPDATE、またはステートメントをロールバックします。DELETE

ビューがアクセスされたときにのみ更新された場合、この制限が存在する必要はありません。

于 2014-05-07T13:36:07.987 に答える