2009-02-24 4 views

答えて

25

いいえ、クラスタ化することはできません。ただし、明示的にクラスター化されていないと定義されておらず、クラスター化されたインデックスがテーブルにない場合、クラスター化されたものとして作成されます。

10

プライマリキーをクラスタ化できるようにすることはよくありません。特に、プライマリキーがIDENTITYによって割り当てられるとき、それは本質的な意味を持たないので、それに応じてテーブルを整理しておくためのあらゆる努力が浪費される。

表ProductをProductID INT IDENTITY PRIMARY KEYとします。これがクラスタ化されていると、何らかの方法で関連する製品がディスク全体に広がる可能性があります。 ManufacturerIDやCategoryIDのように、我々が照会する可能性の高いものでクラスタリングするほうが良いかもしれません。いずれの場合も、クラスタード・インデックスは(他のものが等しい)対応するクエリーをはるかに効率的にします。

一方、これを指す子テーブルの外部キーがクラスタリングの候補になる可能性があります(私の反対は、親戚ではなくIDENTITY属性を実際に持つ列に対するものです)。上の私の例では、ManufacturerIDがIDENTITYとして設定されているManufacturerテーブルへの外部キーである可能性が高いです。 その列はクラスタ化されるべきではありませんが、それを参照するProductの列は良い利点をもたらすかもしれません。

+1

ほとんどの場合、同一性の存在は、そのIDによってレコードにアクセスすることを意味します。したがって、IDフィールドのクラスタ化された主キーは良い考えです。 –

+2

@ C-F - それはクラスタ化する理由ではありません。そのプライマリキーに基づいてクエリを実行している場合は、そのインデックスが取得します。また、クラスタード・インデックスの行の全幅と比較して相対的に狭いインデックスを取得するために必要なIO数がほぼ確実になるため、おそらく早くなる可能性があります。 –

関連する問題