web-dev-qa-db-ja.com

インデックスが多すぎるかどうか、またはインデックスが多すぎるかどうかを知る方法は?

Microsoft SQL Server Profilerを時々実行すると、作成する新しいインデックスと統計の束が提示されます( "... 97%の推定改善...")。

私の理解では、追加されたすべてのインデックスはSQL SELECTクエリを高速化できますが、インデックスを調整する必要があるため、UPDATEまたはINSERTクエリも低速になります。

「インデックスが多すぎる」/統計はいつあるのでしょうか。

多分これについて明確な答えはありませんが、経験則はあります。

27
Uwe Keim

負荷プロファイルは、この質問に答える上で最も重要な要素です。

  • ロードが読み取り集中型である場合、最も重いまたは最も頻繁なクエリをインデックスで満たす必要があります。

  • 負荷が書き込み集中型の場合は、慎重にインデックスを作成してください。たとえば、UPDATEのニーズを満たすシークと、1つまたは2つの最も高価なSELECTを満足させるインデックス。

  • 負荷がOLAP 1の場合、とにかくターゲットテーブルをスキャンするため、インデックスは控えめにしてください。

インデックスが多すぎるとどうしてわかりますか?

  • あなたがそれらのいくつかを見ることができるとき 使用されていません クエリによって。

  • 頻繁にDELETE、UPDATE、またはINSERTを実行すると、コストのかかるいくつかのインデックス変更(つまり、非クラスター化インデックス insertpdate 、または delete )を含むクエリプランが表示される。判断に基づいて、これらのDMLステートメントのペナルティが、更新する必要のあるインデックスから得られる利益に値するかどうかを判断します。

24
Nick Chammas

維持されているが使用されていない(またはほとんど使用されていない)インデックスがある場合、インデックスが多すぎます。ユーザーのパフォーマンスを向上させるためにすべてのインデックスが使用されている場合は、あまり多くありません。

8
mrdenny