見よ、フィルタリングされたインデックス。ドキュメントから(私の強調):
フィルター処理されたインデックスは、最適化された非クラスター化インデックスであり、明確に定義されたデータのサブセットから選択するクエリをカバーするのに特に適しています。 フィルター述語を使用して、テーブル内の行の一部にインデックスを付けます。 適切に設計されたフィルター処理されたインデックスは、フルテーブルインデックスと比較して、クエリパフォーマンスを向上させるだけでなく、インデックスのメンテナンスとストレージのコストを削減できます。
そして、これが一意のインデックスとフィルター述語を組み合わせた例です:
create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;
これにより、基本的にID
の一意性が強制されます RecordStatus
の場合 1
です 。
そのインデックスの作成に続いて、一意性違反はアラーを発生させます:
メッセージ2601、レベル14、状態1、行13
一意のインデックス「MyIndex」を持つオブジェクト「dbo.MyTable」に重複するキー行を挿入できません。重複するキー値は(9999)です。
注:フィルター処理されたインデックスはSQL Server 2008で導入されました。以前のバージョンのSQLServerについては、この回答を参照してください。