12

主キー (従来の ID 列) として IDENTITY 列を持つテーブルがあります。

SQL Server は、その主キーのクラスター化インデックスを自動的に作成します。

私の質問は:

  • より多くの列を持つ CLUSTERED INDEX コンポジットを 1 つだけ持つことはできますか?

はいの場合、デフォルトのクラスター化インデックスを削除して、この属性で新しいクラスター化インデックスを再作成するにはどうすればよいですか。

ご協力ありがとうございました

4

1 に答える 1

21

はい、テーブルごとにクラスター化インデックスを 1 つだけ持つことができます。データはそのインデックスによって物理的に配置されるため、複数持つことはできません。

ただし、複合クラスター化インデックスを使用することはお勧めしません。なんで?クラスター化インデックスは常に次のようにする必要があるためです。

  • できるだけ小さく - 4 バイトの INT が最適です
  • 安定 - 決して変更されないため、すべてのインデックスで更新が波及することはありません
  • unique - それ以外の場合、SQL Server は人工的な 4 バイト値でエントリを「一意化」する必要があります
  • 最適は次のとおりです。

INT IDENTITY はクラスター化されたインデックスとして最適です。そのままにしておくことをお勧めします。

クラスター化インデックス列 (または列のセット) は、同じテーブルのすべての非クラスター化インデックスのすべてのエントリにも追加されます。そのため、クラスター化インデックスを 20、50 バイト、またはそれ以上に大きくすると、無駄になり始めます。多くのスペース - ディスク上およびサーバーのメモリ内に、一般にシステム パフォーマンスが低下します。

クラスター化されたインデックスと、クラスター化されたインデックスが適切であるために必要なものについては、こちらをご覧ください。

于 2010-07-08T10:22:48.717 に答える