2011-08-06 2 views
0

オブジェクトの大半が非アクティブ(クローズ)であるオブジェクトがアクティブであるか非アクティブであるかを示すビット列の表を考えてみます。ビット列の索引

この列(2)の個別値の数が限られているため、SQLエンジンは、ビット列に対してインデックスを作成するのではなく、開いている項目を検索するためにテーブルスキャンを実行する方が効率的だと認識しました。

SQL 2008には、インデックス上のフィルタを許可する新しい機能があります。その内部について多くのことを知らなければ、インデックスにはフィルタ基準を満たす場合にのみレコードへの参照が含まれており、このアプローチは分割に頼らずにすべてのアクティブなレコードを取得する効率的な手段を提供すると仮定しますアクティブなレコードを別のテーブルまたはパーティションにコピーします。

オープンレコードレコードのプライマリキーを、アクティブレコードを識別するために使用したテーブルに配置し、メインテーブルをこの「アクティブリスト」テーブルに結合してアクティブレコードのみを返しました。

フィルタリングされたインデックスをこの目的で使用するのは、このような状況では適切ではない理由はありますか?

答えて

3

Activeのフィルタリングされたインデックスは有効な選択肢です。

はおそらく、具体的 がFULLSCANと彼らの統計情報を更新する(特に揮発性データ上) フィルタ索引では、特定のUPDATE STATISTICSを追加したくなるでしょう。良いニュースは、彼らが更新統計のしきい値が基礎となる列ではなく、フィルターのインデックスに基づいているためです(更新するので、より簡単/少ない、コストのかかる 統計)より小さいインデックス

ことが 可能性があるということです値のみ。

Ref