sql >> データベース >  >> RDS >> Sqlserver

条件付き一意制約

    見よ、フィルタリングされたインデックス。ドキュメントから(私の強調):

    フィルター処理されたインデックスは、最適化された非クラスター化インデックスであり、明確に定義されたデータのサブセットから選択するクエリをカバーするのに特に適しています。 フィルター述語を使用して、テーブル内の行の一部にインデックスを付けます。 適切に設計されたフィルター処理されたインデックスは、フルテーブルインデックスと比較して、クエリパフォーマンスを向上させるだけでなく、インデックスのメンテナンスとストレージのコストを削減できます。

    そして、これが一意のインデックスとフィルター述語を組み合わせた例です:

    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については、この回答を参照してください。



    1. PostgreSQLでデータを挿入および削除する方法

    2. PL / SQLがロールによって付与された権限を尊重しないのはなぜですか?

    3. JavaのpreparedStatementを使用してJSONオブジェクトをPostgresに挿入するにはどうすればよいですか?

    4. SQLServer整数をバイナリ文字列に変換する