52

テーブルに列(UserNameなど)があり、一意であることを確認したい。そのため、その列に一意のキーを作成し、それをIX_Users_UserNameと呼びます。

ここで、ユーザー名に基づいてユーザーを頻繁に検索する場合は、そのフィールドのインデックスがあることを確認したいと思います。

別のインデックスを作成する必要がありますか、それとも主キーがクラスター化された一意のキーであるのと同じように、一意のキーもインデックスと見なされますか?

4

3 に答える 3

40

一意キー:一意キーは、それらが定義されている列の一意性を強制します。一意キーは、列に非クラスター化インデックスを作成します。一意キーは1つのNULL値のみを許可します。

テーブルを変更して、列に一意の制約を追加します。

ALTERTABLE作成者ADDCONSTRAINTIX_Authors_Name UNIQUE(Name)GO

ソース

MSDNからの詳細情報。

FWIW-制約によってインデックスが作成されない場合は、IX_通常はインデックスに関連付けられていると見なされるため、名前を付けることは避けます(IX =インデックス)。

于 2008-12-14T05:11:54.660 に答える
22

基本的に、SQL Server では、一意のインデックスによって一意の制約が実際に実現されます。

UNIQUE 制約と UNIQUE INDEX の違いは、実際には非常に微妙です。UNIQUE INDEX を作成すると、別のテーブルの外部キー制約でそれを参照できます (UNIQUE 制約を作成すると機能しません....)。

違いは何ですか?ええと - ユニーク制約は、実際にはテーブル上でより論理的なものです - 特定の列 (または列のグループ) の内容が一意であるという意図を表現したいのです。

一意のインデックス (ほとんどのインデックスと同様) は、「舞台裏」の実装の詳細です。

私の観点からは、本当に問題がない限り、常に UNIQUE INDEX を使用します。参照整合性制約の一部であることの利点は非常に有効で、場合によっては非常に役立ちます。機能的には、実際には、Unique Constraint と Unique Index の使用に違いはありません。

于 2008-12-16T21:39:48.223 に答える
1

一意のキーは、ほとんどすべてのデータベース製品のインデックスです。そうでなければ、データベースはそれを強制するのに苦労するでしょう。値を挿入するとき、データベースは「その値はすでに存在しますか?」と答える必要があります。そのための正しい方法は、インデックスを参照することです。

テストするSQLServerが目の前にありませんが、そうでない場合はショックを受けます。

于 2008-12-14T04:51:55.620 に答える