1

プライマリ、一意、クラスター化インデックスなどについて読みましたが、例を使用して理解する必要があります。

以下の画像は、SQLServerWeb管理パネルからキャプチャされた自動生成されたaspnet_Usersテーブルです。

自動生成されたASP.NETユーザーテーブルhttp://eggshelf.com/capture.jpg

これをモデルとして取り上げます。Companiesというカスタムテーブルを作成し、フィールドがID、Name、ShortName、Address、City、Countryであるとします。ID、Name、ShortNameの各フィールドに値を複製することはできません。

このテーブルのインデックスを作成するためのアプローチは何ですか?クラスター化するか、クラスター化しないか。以下のインデックスはあなたにとって論理的ですか?

Index          Columns         Primary    Unique    Clustered    ign.Dup.Keys   Unique Key
------------------------------------------------------------------------------------------
PK_ID          ID              True       True      False        False          False
Comp_Index     Name,ShortName  False      True      True         False          False

よろしく。

4

3 に答える 3

2

インデックスはテーブル構造ではなく、アクセスパターンに関するものです。

テーブル内のデータをクエリし、それに応じてインデックスを作成する方法を確認する必要があります。

経験則では、WHERE句で一般的に使用されるフィールドにインデックスを定義することを検討してください。

この件については、このブログ投稿を参照してください。

アップデート

テーブルに定義できるクラスター化インデックスは1つだけです。これは通常、例のように、テーブルのIDフィールドで実行されます。

他のインデックスは非クラスター化されます。

WHERE他の(クラスター化されていない)インデックスに関して-句に両方のフィールドを含むクエリのみを使用する場合ORDER BYは、プライマリソートがオンになりますName(プライマリソートがオンになりますShortName)。その理由は、これがインデックスの保存方法であるためです。最初にName、次にShortName

ただし、句でShortNameプライマリソートとして使用する場合、または句なしNameで使用する場合は、WHEREそれぞれに1つずつ、合計2つのインデックスを使用することをお勧めします。

于 2010-07-22T08:40:33.217 に答える
1

Odedは正しいです-インデックス(クラスター化および非クラスター化)はすべてパフォーマンスに関するものであり、クエリのタイプに関する詳細な知識が必要です。

たとえば、ShortNameとNameの両方が個別にクエリされる場合は、ShortNameとNameに個別の非クラスター化インデックスが必要になる場合があります。一意性を強制する必要がある場合は、UNIQUE INDEXを使用します(またはShortNameとNameにUNIQUE CONSTRAINTを追加します)。IDはPKであるため、すでに一意です。

また、会社のテーブルからデータを取得する方法について詳しく知っている場合は、クラスター化インデックスを(デフォルトのIDから)変更することもできます(たとえば、都市内のすべての企業を一度に取得するのが一般的な場合は、都市のクラスターなど)

于 2010-07-22T08:57:18.013 に答える
1

BradのSureGuideto Indexesを読んで、SQLServerインデックスの全体的な理解をすばやく深めてください。

通常、クエリ分析を実行していない場合、開始点は次のようになります。

  • 主キー列は、クラスター化インデックスの適切な候補になります(多くの場合、使用されるデータ型とキー幅によって異なります)。
  • 外部キー列に非クラスター化インデックスを作成する必要があります。
  • クエリからSARG列に非クラスター化インデックスを作成する必要があります。

次に、これらの一般的なインデックスのヒントを見てください。

于 2010-07-22T10:33:18.050 に答える