web-dev-qa-db-ja.com

ビューはテーブルインデックスを利用しますか

クラスタ化インデックスと2つの非クラスタ化インデックスを持つテーブルがあります。今、私の見解では、テーブルからすべてを選択しています

create view dbo.MyView
as 
Select * from MyTable

クエリでこのビューを使用しているときに、このビューがテーブルに作成されたインデックスを利用すると想定できます。 (つまり、Select * from MyTableと同じように機能します)?または使用する必要があります インデックス付きビュー

質問への追加

ビューがテーブルインデックスを利用できる場合は、SELECT * FROM MyView Where SomeColumn = @someValueはパフォーマンスに悪影響を与える可能性があります(ビューに大量のデータがある場合、インデックスが作成されていない場合はヒープのように動作します)。この問題を克服する方法は? NOEXPANDを使用する以外(Enterpriseエディションを使用しているため)

7
Zerotoinfinity

ビューは単なる「保存されたクエリ」です。ベーステーブルのインデックスは、ビューにアクセスするときに常に使用されます。

ビューにクエリを実行するたびに実行したくない高価なロジック(集計または結合)がビューに含まれている場合を除き、インデックス付きビューを使用する必要はありません。ビューが「マテリアライズ」されている場合でも、オプティマイザはベーステーブルとそのインデックスに直接アクセスでき、ビューのインデックスを完全に無視することに注意してください。

また、ビューのインデックスをベーステーブルのデータに合わせて維持すると負荷がかかることに注意してください。ベーステーブルのいずれかに書き込むたびに、ビューのインデックスも更新する必要があります。

14
spaghettidba