4

SQL Server 2008 R2を使用していて、一意でないnull可能フィールドにクラスター化されていないインデックスを追加したいとします。私のインデックスは、1つの以上の列が私のクラスタ化インデックスをアクセスしないようにするために含まれています:myBasicFieldの実際のデータでnull値をスキャンしないようにしてインデックススキャンを減らす方法

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField); 

NULLsがたくさんあるだろうと私は増やすことができる方法がある場合、私は思っていましたこれらのファイルをスキャンしないか、NULLの値がインデックスに格納されないようにしてください。

ありがとうございます。

+0

私はフィルタリングされたインデックスの答えが好きです。これはただのものです。あなたは、FKの関係を持つ別のテーブルにそのデータを置くことができますし、nullを完全に取り除くこともできます(NULLの場合はFKテーブルの行がない場合)。両方がクラスター化インデックスである場合、PKからFKへの結合は非常に高速です。 – Paparazzi

答えて

6

は、あなたがフィルターインデックスを使用することができます。 intro blog post hereを参照してください - 構文は次のようになります。

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField) 
WHERE myBasicField IS NOT NULL; 

同じWHERE句はこれを利用することができ、そしてインデックスはたくさん小さくなり、したがって、あなたがこのようなNULL値を除外した場合、より良いを行う含むすべてのクエリ。

+0

+1ユーザクエリがmyBasicFieldがどこにあった場合は、フルテーブルスキャンを取得するでしょうか? – Paparazzi

+0

@Blam:おそらく、あなたのクエリに他のどの基準があるかによって異なります。 'myBasicField'がNULLの場合、** this ** indexは絶対に使用されません。 –

+0

あなたの迅速な対応の皆様、ありがとうございます。それは私が必要としたものだ –

3

フィルタリングされたインデックスを探しています。参照:SQL Server 2008およびそれ以降では

http://technet.microsoft.com/en-us/library/cc280372.aspx

+0

速い回答ありがとう[私はあなたに投票する評判があまりにも少ない、ごめんなさい]]。私はこれをチェックして知らせます –

関連する問題