DB2 10.5 for Linux, UNIX, and Windows

ユニーク索引と非ユニーク索引

ユニーク索引は、表内のデータの 2 つの行が同一のキー値を持たないようにすることによりデータ整合性の維持に貢献する索引です。

データが入っている既存の表にユニーク索引を作成する場合、索引キーを構成する列または式の値について固有性がチェックされます。 キー値が重複する行を含む表では、索引の作成処理が失敗します。 表にユニーク索引を定義した場合、索引内でキーが追加または変更されるときには必ず、固有性が強制されます。 強制される操作の例をいくつか挙げると、挿入、更新、ロード、インポート、整合性の設定などがあります。 データ値の固有性を強制するだけでなく、ユニーク索引を使用することによって照会処理中のデータ・リトリーブ・パフォーマンスを改善することもできます。

非ユニーク索引は、その索引が関連付けられる表に対して制約を適用するために使用されることはありません。その代わり、非ユニーク索引は、頻繁に使用されるデータ値のソート順序を維持することにより照会のパフォーマンスを改善するためだけに使用されます。

NULL キーを含めるか除外するか

ユニーク索引および非ユニーク索引を作成するとき、キーのすべての列または式が NULL の場合に、そのキーを索引オブジェクトに挿入されないように設定できます。 NULL キーと関連付けられたデータに照会でアクセスしないようにする必要がある場合は、NULL キーを除外すれば、ストレージとパフォーマンスの最適化が改善されます。 ユニーク索引の場合、表データの固有性の強制では、索引キーが NULL の行が無視されます。

主キーまたはユニーク・キー制約とユニーク索引の違い

主キー制約、ユニーク・キー制約、そしてユニーク索引には大きな違いがないことを理解しておいてください。 主キーおよびユニーク・キー制約の概念を実装するために、データベース・マネージャーはユニーク索引と NOT NULL 制約を組み合わせて使用します。 したがって、ユニーク索引が単独で主キー制約を強制することはありません。ユニーク索引は NULL 値を許容するからです。 NULL 値は不明な値を表すとはいえ、索引の場合は、他の NULL 値と等しいものとして扱われます。

そのため、ユニーク索引が 1 つの列で構成される場合、NULL 値は 1 つしか許容されません。NULL 値が複数存在すると、ユニーク制約違反になります。同様にユニーク索引が複数の列で構成される場合も、値と NULL の特定の組み合わせは 1 回しか使用できません。