2011-08-24 8 views
1

私はアプリケーションデータベーステーブルのパフォーマンステストを行っています。私はSQL Serverのインデックス作成のコンセプトに悪いわけではない。実用的になったとき、私の理論は私を混乱させている。こんにちはSQlサーバーのノンクラスタードインデックス

私の質問は、私は単一のテーブルに複数の非クラスタ化インデックスを使用する必要がありますシナリオを教えていただけますか? 。

1つの書籍に複数のインデックスが必要ですか?私は混乱しています 。

助けてください。

+1

複数の異なる方法で値を参照する場合があります。例えば生年月日または名前で人のテーブルを検索する。 –

答えて

2

指示は非常に複雑で、ここでの簡単な回答の範囲を超えています。ただし、一般に、テーブルからデータを読み取る方法に基づいて、テーブルにインデックスを追加します。

YourTable 
ID   int identity PK 
WidgetName varchar(10) 
WidgetSize numeric(6,2) 

...そしてあなたが頻繁に実行します:あなたは、テーブルを持っている場合

SELECT.. WHERE WidgetName='xyz'あなたは決してSELECT.. WHERE WidgetSize =12.4はその列のインデックスを追加していないしていないならば、WidgetName にインデックスを追加します。

+0

ありがとう、次にINCLUDE句は何のために使われますか?どのように動作するのですか? –

+0

クエリが索引データを検索する索引を使用する場合は、索引データを検索した後、表の実際の行に戻ってポインタを使用して、問合せに必要なすべての列を取得します。索引に問合せに必要なすべての列が含まれている場合は、実際の行を検索するステップをスキップできます(索引に必要なすべての情報が含まれています)。ほとんどの場合、特定の列の索引のみが必要です(特に、索引が一意の場合)。 'INCLUDE'を使うと、データのためにインデックスにデータの列を追加することができます。インデックスの検索可能な部分や固有の部分には含まれません。 –

+0

...これは、実際のテーブルとそれらの列を取得します。これは、クエリがインデックスを使用していても、SELECT *が悪い理由の1つです。テーブルに戻ってすべての列を取得する必要があります。インデックスに 'INCLUDE'を使用することにはわずかな不利益があります。すべての' insert'または 'update'はより多くのデータをインデックスにプッシュする必要があります。何度も読んでいる典型的なアプリケーションでは、これは通常、選択速度からのゲインと比較して非常に小さいです。 –