2012-05-10 18 views
6

Q1:SQL Serverデータベースの外部キー列のインデックスを作成する価値はありますか?SQL Serverのインデックス - インデックスに含める列は何ですか?

Q2:SQL Serverデータベースに2つの関連テーブルがあり、パフォーマンスを向上させるために外部キー列にインデックスを作成する場合、インデックスに含める必要がある列とそのインデックスの種類最適ですか?例えば

...

Table1

Table1ID int型(主キー)

Table2

Table2ID int型(主キー)
Table1ID int型(外部キー)

.. Table2のインデックスはTable1IDまたはプライマリキー(Table2ID)も含める必要があります。

Q3:私は表1および表2の両方に関連する第3のテーブルを含むように実施例を拡張する場合、私は、各列に対して1つのインデックスまたは両方の列の一つのインデックスを作成するのですか?

Table3

Table3ID int型(主キー)
Table1ID int型(外部キー)
Table2ID int型(外部キー)

答えて

6

Q1。 はい。 (定期的に使用されていない場合は、いつでも後で削除することができます)。

Q2。 Table1IDだけでTable2のインデックスを作成できますか? はい。索引の主な使用目的は、オプティマイザがこれら2つの表間の結合を助けることであると仮定します。 (全体的なクエリ・ワークロードの一部である他のいくつかのクエリを満たすのではなく)。

Q3。 はい。外部キーを持つ各列は、その親キーテーブルとは別のインデックスを持つ必要があります。

(すべてあなたがOLTPデータベースではなく、OLAPデータベースを持っていると仮定)は

この投稿は、データベース内のすべての不足している外部キー・インデックスのスクリプトを生成しますTSQLを提供していますのTSQL: Generate Missing Foreign Key Indexes

+0

@Mitch Wheatさんの回答に感謝します。どのタイプのインデックスを作成するべきですか(クラスタ化されているのか、クラスタ化されていないのでしょうか)。 CREATE CLUSTERED INDEX IX_Table2_Table1ID ON Table2(Table1ID)のようなものか、それともオプションを追加する必要がありますか? – johna

+2

一般に、すべてのFKインデックスはクラスタ化されません。 –

0

なしあなたが作成しようとしているインデックスは悪い考えです。しかし、パフォーマンス指標を探している場合は、テーブルがどのように最も頻繁にアプローチされているかを調べる必要があります。どの列がWHERE句に最も多く含まれますか。これらのインデックスに基づいてインデックスを作成します。

また、最良の基数を探し、WHERE節の先頭に配置します。パーティショニングも考慮してください。

関連する問題