web-dev-qa-db-ja.com

SQL Serverの冗長インデックス

現在、パフォーマンスチューニングの練習として、データウェアハウスのすべてのインデックスを調べています。これらのインデックスのいくつかはシステム統計で使用されていません。バッチ中のオーバーヘッドを削減するためにそれらを削除することを検討しています。

PK列が他のインデックスの中間で使用されているため、これらのいくつかは意味をなさないなどです。

例:

NONCLUSTERED INDEX Index1 (A, B, C)

NONCLUSTERED INDEX Index2 (A, B)

SQL Serverは、Index2と同じ行にIndex1を使用でき、Index2は不要ですか? rowIDがB +ツリーのリーフレベルノードに含まれていることを知っていますが、CのすべてのレコードはIndex1で有効です。

Index2はパフォーマンスに影響を与えずに削除できますか?
私が理解している限り、インデックスは実行プランのソートにも役立ちます。 Index1はこれらにも使用できますか?

4
Creztian

一般に、大きな問題なくIndex2を削除できるはずです。 Index1は、Index2が現在処理するすべてのクエリをカバーできます(2つの間に含まれる列の違いがないと仮定)。

Index1の列Cが大きい場合、3番目の列が各ページでより多くのスペースを占めるため、Index2を使用したクエリのIndex1でメモリにわずかに多くのデータを読み取ることになるかもしれませんが、ほとんどのシナリオではそうは思いません知覚可能なパフォーマンスの違いに気づくでしょう。

9
Bert Wagner