3

典型的な顧客テーブルがあるとします。

Id Int Identity Primary Key, 
FirstName varchar(255), 
LastName varchar(255), 
Phone VarChar(30)

したがって、主キーは Id にクラスター化された一意のインデックスを作成します。

検索を高速化するために、名前フィールドにインデックスを追加したいと考えています。

私の質問は、それらのインデックスに Id を追加する必要があるかどうか、またはそれらのインデックス自体が主キーに関連付けられるかどうかです。

例えば;

Create Index IX_Customer_FirstLastName On Customers(FirstName, LastName, Id)

……やり過ぎですか?

以下は多かれ少なかれ効率的ですか?

Create Index IX_Customer_FirstLastName On Customers(FirstName, LastName)

ティア

4

1 に答える 1

3

IDを他のインデックスに追加しても意味がありません。同一の組み合わせを持つ多数の行がfirstName lastNameあり、すでに知っている場合にのみ役立ちますID...

ただし、検索対象のレコードが既にわかっているID場合は、クラスター化インデックスを使用して検索できます。

さらに、すべての非クラスター化インデックスにはクラスター化インデックスの値が既に含まれているため、非クラスター化インデックスを使用して行が見つかった後、クラスター化インデックスを使用して行を検索できます。 フィールド ( 、)のカバリング インデックスにしたい場合は、非クラスター化インデックスに含める必要はありません。IDFirstNameLastNameId

FirstName最後に、 と を使用して単一のインデックスを作成する場合、このインデックスは、インデックスの先端であるLastNameを含む検索でのみ使用されます。のみ、または のみFirstNameを使用して検索を実行する場合は、列ごとに 1 つずつ、2 つのインデックスを作成します。LastNameFirstName

于 2012-04-04T16:01:33.923 に答える