1

を非クラスタ化インデックスを好むためのいずれかの理由は、私は別にPK_MyTable NONCLUSTEREDインデックス上からこの主キーがクラスタ化インデックスの上に

CREATE TABLE [dbo].[MyTable](
    [MyTableId] [bigint] IDENTITY(1,1) NOT NULL, 
    [SomeTable2Id] [bigint] NOT NULL, 
    [SomeTable3Id] [bigint] NOT NULL, 
    [SomeData] [smallint] NOT NULL, 
CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED 
(
    [MyTableId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
) ON [PRIMARY] 

のように定義されているテーブルをしました、BIGINTとアイデンティティである、私はいくつかの他のNONCLUSTEREDをしましたSomeTable2IdとSomeTable3Id上のインデックス

私は上記のCLUSTEREDインデックスを作成するほうが理にかなっていると思いますが、CLUSTEREDインデックスを作成せず、代わりにNONCLUSTEREDを作成することについての正当な理由はありますか?

PSこれらのトピックについては多くの質問がありますが、関連するものは見つかりませんでした(上位20リスト)。これが尋ねられた場合は、関連する質問の投稿に私をリダイレクトしてください。

EDIT:MyTable他の2つのテーブルSomeTable2SomeTable3をマッピングしていると私のクエリは、他のIDを取得するためにSomeTable2IdまたはSomeTable3Idと要求のいずれかを持っているほとんどの時間の代わりに複合キーを有するので、私たちはこのMyTableIdを持っている場合を考えてみましょう。したがって、このテーブルのこのような使い方では、MyTableId以上のクラスタ化インデックスの作成、またはSomeTable2IdおよびSomeTable3Id以上の2つのノンクラスタードインデックスの作成は、本当に必要ですか?

答えて

1

私は、あなたは間違いなくクラスタ化インデックスでは、あなたのキーとしてMyTableIdを持つべきだと思いますテーブルが実際にどのように使用されているかについての詳細はありません。

クラスタ化インデックスまたはヒープテーブルのいずれかを選択していることに注意してください。クラスタード・インデックスはテーブルのインデックスではありませんが、クラスタード・インデックス・キーに基づいてテーブルがBツリーに格納されていることを示します。

両方の種類の表では、非クラスター化インデックスも使用できます。

読み取りパフォーマンス(特に幅の広いテーブル)では、クラスタ化されていないインデックス(列が含まれている可能性があります)は、利益を求める場所になります。

+0

ありがとうございます。私は一つの懸念があります。私の場合、このテーブルは2つの異なるテーブル間のマッピングテーブルとして機能します。私はルックアップのためにこのテーブルを使用しています。ほとんどの場合、私は主キーを使用しません。それは違いがありますか? – Ankush

+0

@Ankush主キーには常に索引があります(表のクラスタード索引の選択であるかどうかにかかわらず)。他の方法でアクセスする場合は、それらのキー(クラスタ化または非クラスタ化)のインデックス作成も検討してください。クラスタリングインデックスの選択は、一意で、狭く、静的で、増加する必要があります。いくつかの候補がある場合は、範囲問合せで使用される可能性が最も高いものを選択します(そうでない場合は、おそらくID)。 –

+0

私はそれを理解していますが、これは上記のコメントの私の懸念に対処していません。私はあなたがそれを意味すると思います**違いはありませんし、プライマリキーでクラスタードインデックスを参照してください。右? – Ankush

4

いいえ、間違いなくにはクラスタードインデックスが必要です。そのIdentityフィールドも理想的なクラスターキーです。ここで

は、クラスタ化インデックスに関するキム・メーカーTrippからいくつかの良い記事です:

Clustered Index Debate

Clustered Index Debate Continues

Here is a whitepaper from MS about this topic as well.

+1

+1 Kim TrippはSQL Serverのインデックス作成に関する究極のリソースです。 :-) –

+1

@marc - 彼女は彼女のものを知っていて、私は彼女が通常は再現しやすい例を含んでいるのが好きです。ゲイルショーもそれに最適です。 – JNK

+0

テーブルにそれ自身を参照する外部キーがある場合は重要ですか?例えばmanagerid列を持つ従業員表 – Ankush

関連する問題