2009-06-01 8 views
3

私はテーブル( "ユーザ")に対してビュー( "UsersActive")を使用しています。ビューにはフィルタが1つしかなく、DateTime Users.DeletedOnがNULLであるかどうかがチェックされます。基本的には、削除されていないすべてのユーザーが含まれます。SQL:テーブルに対するビュー - ビューに対するクエリはテーブルインデックスを使用していますか?

テーブルの代わりにビューに対してLinqクエリを実行すると、それでもテーブルインデックスが使用されますか、またはビューの特別なインデックスを作成する必要がありますか?私の理解ではビューは何もなく、定義済みのクエリではないと私は直接照会されたかのように動作するはずです:DeletedON = NULL

は私の仮定は、基礎となるテーブルのインデックス点であるユーザーから

SELECT *をそれでも正しいものが使用されますか?

+0

Yoyurの仮定が正しいです:) – Arvo

答えて

5

ほとんどの場合、SQL Serverクエリオプティマイザは、ベーステーブルのインデックスを使用するほどスマートです。クエリプランを見ることでこれを見ることができます。

SQL Serverのエンタープライズエディションを使用している場合は、インデックス付きビューも使用できます。

-1

索引付けされていない場合のビューは、それを定義する問合せを使用して毎回再生成されます。そのクエリのテーブルがインデックスされている場合、テーブルのインデックスが使用されます。

ビューをインデックスすることもできます。この場合、データセットは物理ディスクにコミットされ、インデックスは2セットあります。

+0

?なぜ私はこれのためにdownvoteを得たか分からない??? – jfrobishow

2

ビューは、基礎となるSQL文にまったく完全にトランスペアレントです。これは、信頼性の高い設計上の前提です。

1

インデックス付きのビューは、インデックスなしのビューとは大きく異なります。

ビューは、エンジンによって効果的にインライン展開されるため、オプティマイザによって決定されるテーブルインデックスはすべて使用できます。

索引ビューは索引を実現(最新の状態)します。これはビューのユーザーが使用できますが、まだ使用されていない可能性があります。

あなたの例に基づいた追加の注記 - フラグは、フラグまたはコード列にある可能性があるため、NULL基準では効果的に使用されない可能性があります。

0
あなたのクエリを書き直す必要があるほとんどの

:DeletedONはNULL ISユーザーから

SELECT *

DeletedONは= NULLは真ではないでしょうDeletedONがNULLであったとしても

関連する問題