一意性制約はデフォルトでインデックスですか?そうでない場合、一意の制約は、SELECT ... WHERE
句で使用したときにインデックス付きの列と同じパフォーマンス結果になりますか?
ありがとう
一意性制約はデフォルトでインデックスですか?そうでない場合、一意の制約は、SELECT ... WHERE
句で使用したときにインデックス付きの列と同じパフォーマンス結果になりますか?
ありがとう
一意の制約は、必然的にインデックスです。通常は「UNIQUE INDEX」として定義します。どのような場合でも、一意の制約を効率的に実装するにはインデックスが必要になるため、インデックスを持っていても不利になることはありません。
制約は実際にはインデックスとは大きく異なります。つまり、MySQLが一意性を強制することになっているというだけです。ただし、インデックスは(一意の場合もありますが)ハードディスク上の物理的な順序、または列の効率的な検索を可能にする追加の構造(通常はツリー)に関するものです。
ただし、これらすべてを、(通常はクラスター化された)一意のインデックスを定義する主キーと混同している可能性があります。
一意性制約は、何か(属性値の組み合わせなど)がリレーション全体(「テーブル」)のスコープ内で一意でなければならないという事実を表現する方法です。
それは論理設計のレベルです。
インデックスは、そのような制約を適用するのに役立つ可能性のある手段です。
それは物理設計のレベルです。
一部のDBMS製品は、UNIQUE制約などの特定の論理設計構造の存在から、インデックスの存在などの特定の物理設計構造を推測する場合があります。他の人はそうではないかもしれません。
UNIQUE は実際にはインデックスの制約であるため、UNIQUE は、一意性を強制しているフィールドにインデックスがあることを意味します。
一意の制約を使用する前に、主キー制約を確認してください。
主キー制約は、unique 制約と not null 制約を宣言することになります。主キーに複数の列がある場合、各列は非 null 制約を取得しますが、一意の制約はまとめてすべての列に適用されます。
主キーを宣言すると、DBMS によってインデックスが作成されます。必要に応じてインデックスを削除できますが、DBMS が一意性をチェックするためにテーブル スキャンを実行すると、パフォーマンスが大幅に低下します。
主キー制約はエンティティの整合性を強化し、REFERENCES (外部キー) 制約は参照整合性を強化します。これらを組み合わせることで、データの整合性を確保するのに大いに役立ちます。