1

次のスクリプトを実行しました

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY,
    Info nvarchar(50)
)

驚いたことに、SSMS は ID 列のクラスター化インデックスを作成しました。では、私の質問は、なぜ非クラスター化インデックスではないのですか?

私の理解では、この場合はクラスター化されていないインデックスを使用する方がよいでしょう。これは、バイナリ ツリーにより、値がクラスター化されたインデックスを使用する代わりに、X の値で ID を検索する方がはるかに高速であるためです。何とかグループ化。また、データを受信することを考えると、ID に何らかの方法ですばやくアクセスする必要があります。書かれた多くの記事のように、バイナリ ツリーは特定の ID または複数の ID を受け取るための高速な方法です。それに加えて、ほとんどの場合、テーブルの主キーは自動インクリメント値を持つ ID です。そのため、自動インクリメントの原則のこのアプローチを使用することはかなり一般的です。

では、クラスター化されていないキーを使用する利点は何ですか?また、SSMS でこの既定値が使用されるのはなぜでしょうか?

4

1 に答える 1

3

既定では、テーブルの主キーはクラスター化インデックスによってサポートされます。これは、SQL Server の既定の動作です。必要に応じて変更できます。

CREATE TABLE Test
(
    ID INT IDENTITY PRIMARY KEY NONCLUSTERED,
    Info nvarchar(50)
)

しかし、特にこのINT IDENTITY場合、それはテーブルで想像できるほぼ完璧なクラスター化インデックスです。したがって、SQL Server がこのデフォルトの選択を行うのは「良いこと」です。

SQL Server のすべての「深刻な」テーブルには、適切に選択されたクラスター化されたインデックス (代替のヒープは低速であり、あらゆる点で微調整が面倒なため) と、小さい (4 バイト) 静的 (変更されない) が必要です。 ) のような一意の列INT IDENTITYは、このテーブルのクラスター化インデックスとして最適です。

クラスタリング キーを賢く選択する方法と、それが非常に重要な理由について詳しく知りたい場合は、このトピックに関する Kimberly Tripp の発言をすべて確認してください。

于 2012-12-27T16:46:21.927 に答える