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

PostgreSQLはどのようにUNIQUE制約を適用しますか/どのタイプのインデックスを使用しますか?

    または-インデックスを作成し、値が一意であると想定しない

    です 値がであると想定しても安全です 一意のインデックスが定義されている場合は、一意。これが、固有の制約が実装される方法です(現時点では、おそらく将来のすべてのバージョンでも)。

    UNIQUEの定義 制約は実質的に同じ (ほとんど、以下を参照)インデックスタイプを指定せずに一意のインデックスを作成します。そして、私はマニュアルを引用します:

    選択肢は、btree、hash、gist、およびginです。デフォルトの方法はbtreeです。

    制約を追加することは、それが可能である将来のバージョンで壊れない標準的な方法にすぎません。 別の方法で実装されます。それだけです。

    いいえ、一意の制約 基本的なbtreeでのみ実装できます PostgreSQLv14までのすべてのバージョンのインデックス。マニュアルの「ADDtable_constraint_using_index」の段落をここに引用します:

    インデックスに式の列を含めることも、部分インデックスにすることもできません。また、デフォルトの並べ替え順序のbツリーインデックスである必要があります。

    ###その他の違い

    • 一意の制約は延期できます 。これは、一意のインデックスでは不可能です。 SET CONSTRAINTSをご覧ください コマンドを実行し、リンクをたどって詳細を確認してください。
    -**外部キー**は、*ただ*一意のインデックスを持つ列を参照できません。 [マニュアル:] [4]

    外部キーは、主キーであるか、一意の制約を形成する列を参照する必要があります。

    最後のビットは時代遅れであるか、getgoからの誤解のようです。参照:

    • 情報スキーマのreferential_constraints.unique_constraint_*列のNULL値

    関連:

    • 演算子クラスを持つインデックスが必要な場合、一意性インデックスは一意性制約よりも優れています



    1. Oracleデータベースにすべてのストアドプロシージャを一覧表示する方法

    2. Exists1またはExists*を使用したサブクエリ

    3. SQLJOINの種類

    4. SQLServerでの日付の処理