インデックスの数が多すぎる/いついるかを知る方法は?


26

Microsoft SQL Server Profilerを時々実行すると、作成する新しいインデックスと統計情報がたくさんあります(「... 97%の改善が見込まれる...」)。

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

私が疑問に思うのは、いつ「多すぎる」インデックス/統計がありますか?

たぶんこれに関する明確な答えはありませんが、いくつかの経験則があります。



ありがとう、@ニック。質問を投稿する前に、Googleとdba.se.comを慎重に検索しました。私の意見では、これはかなり無関係です。インデックスが必要かどうかを知りたくはありませんが、インデックスが多すぎるUPDATEINSERTステートメントが遅くなりすぎると判断する方法を知りたくありません。
Uwe Keim

3
そこで答えを読みましたか?たとえば、受け入れられた回答は、削除する必要のある未使用のインデックスを識別するのに役立つ分析スクリプトへのリンクです。「インデックスが多すぎる」という質問に答えるのに役立つことがあります。
ニックチャマス

回答:


24

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

  • 読み込みが集中する場合は、インデックスが最も重いクエリまたは最も頻繁なクエリを満たすようにします。

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

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

インデックスが多すぎることをどのように確認しますか?

  • それらの一部がクエリで使用さていないことがわかります。

  • 頻繁なDELETE、UPDATEまたはINSERTは、いくつかの高価なインデックス変更(非クラスター化インデックスinsertupdate、またはdelete)を含むクエリプランを示します。これらのDMLステートメントのペナルティが、更新する必要のあるインデックスから得られる利益に見合うかどうかを判断するために、判断を使用してください。


8

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


私は「の2個の出現箇所変更する提案するかもしれないのをする」「あまりにも私はない編集彼らは私の編集は、6文字以上を変更する必要がありますすることができますよう以来、」?
Uwe Keim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.