5

SQL Server 2008 R2を使用していて、一意ではないnull許容フィールドに非クラスター化インデックスを追加したいと思います。クラスタ化されたインデックスへのアクセスを回避するために、インデックスにはもう1つの列が含まれます。

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

の実際のデータにmyBasicFieldはたくさんありますが、NULLsこれらをスキャンしないことでパフォーマンスを向上させる方法NULLsNULL、インデックスに値が保存されないようにする方法があるのではないかと考えていました。

前もって感謝します。

4

2 に答える 2

8

SQL Server 2008 以降では、フィルター選択されたインデックスを使用できます。こちらのイントロ ブログ投稿を参照してください。構文は次のようになります。

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

同じ句を含むすべてのクエリWHEREでこれを利用できます。このように NULL 値を除外すると、インデックスが大幅に小さくなるため、パフォーマンスが向上します。

于 2012-04-09T13:47:02.467 に答える