一意インデックスのデザイン ガイドライン
一意インデックスを使用すると、インデックス キーの値が重複することがないので、テーブルのすべての行を一意にすることができます。一意であることがデータ自体の特性である場合にだけ、一意インデックスを指定します。たとえば、主キーが EmployeeID で、HumanResources.Employee テーブルの NationalIDNumber 列の値が必ず一意になるようにする場合は、NationalIDNumber
列で UNIQUE 制約を作成します。ユーザーが複数の従業員に対してその列に同じ値を入力しようとすると、エラー メッセージが表示され、重複する値は入力されません。
複数列に一意インデックスを指定すると、インデックス キーの値の組み合わせはそれぞれ一意になります。たとえば、LastName 列、FirstName 列、および MiddleName 列の組み合わせに一意インデックスを作成した場合、テーブル内の 2 つの行がこれらの列に対して同じ値の組み合わせを持つことはできません。
クラスタ化インデックスと非クラスタ化インデックスは共に一意インデックスにできます。列のデータが一意である場合、1 つのテーブルに 1 つの一意クラスタ化インデックスと、複数の一意非クラスタ化インデックスを作成できます。
一意インデックスの利点を次に示します。
- 定義された列のデータの整合性が保証されます。
- クエリ オプティマイザの役に立つ追加情報が提供されます。
PRIMARY KEY 制約または UNIQUE 制約を作成すると、指定した列に一意インデックスが自動的に作成されます。UNIQUE 制約を作成することと、制約とは無関係の一意インデックスを作成することの間に大きな違いはありません。データ検証も同じ方式で行われ、クエリ オプティマイザでは、制約によって作成された一意インデックスと手動で作成された一意インデックスは区別されません。ただし、データの整合性を維持することを目的とした列には、列に UNIQUE 制約または PRIMARY KEY 制約を作成する必要があります。この作業を行うことで、インデックスの目的が明確になります。
考慮事項
- 重複するキー値がデータに存在する場合は、一意インデックス、UNIQUE 制約、または PRIMARY KEY 制約を作成できません。
- データが一意のときに一意性を強制する場合は、一意インデックスを作成する方が、同じ組み合わせの列に一意でないインデックスを作成するよりも、より効率的な実行プランを作成できる追加情報がクエリ オプティマイザに提供されます。この場合、一意インデックスを作成することをお勧めします (できるだけ UNIQUE 制約を作成することをお勧めします)。
- 一意非クラスタ化インデックスには、付加非キー列を含めることができます。詳細については、「付加列インデックス」を参照してください。
インデックス オプション
一意インデックスを作成するときに、いくつかのインデックス オプションを指定できます。次のオプションを指定する際には特別な考慮が必要です。
- IGNORE_DUP_KEY
- ONLINE
詳細については、「インデックス オプションの設定」を参照してください。
参照
概念
インデックスの作成 (データベース エンジン)
インデックスの設計の全般的なガイドライン