未使用のNONCLUSTERED INDEXでクエリの速度を向上させることはできますか?


13

これは奇妙な状況ですが、誰かが答えを持っていることを望んでいます。

いくつかのパフォーマンストラブルシューティング中に、NONCLUSTERED INDEXをテーブルに追加しましたsp_BlitzIndex。翌日にその使用状況を確認したところ、読み取り0スキャン/シークが0、シングルトンルックアップが0)であったため、無効にしました。

すぐに、INDEXを追加したときに最初にチェックして解決しようとしていたのと同じアプリの遅さ(パフォーマンスの問題)の苦情を受け取ります。

さて、理論的には、これはまったく偶然のように聞こえます。インデックスは、証明可能、測定可能、使用されていません。無効にしても、クエリのパフォーマンスが低下することはありません。しかし、それはほとんどだTOO偶然。

質問

したがって、私の質問は、単純に十分なものです。

それはすべての可能で、その利用統計情報(のDMVから/非クラスタ化インデックスは、こと、sp_BlitzIndex)まだされており、NOの使用状況を表示しません助けて影響を受けたテーブルの上に何らかの形でクエリのパフォーマンスを?


PS:「試してみろ!」ということわざをspareしんでください。応答; テーブルが頻繁に使用され、インデックスが毎晩のメンテナンスウィンドウまで再有効化(再構築)されないため、明日までテストする必要があります。そして、パフォーマンスの問題の性質は散発的であり、とにかく再現するのは困難です。私は「いいえ、テストしません」と言っているのではなく、テストし、計画する必要があることを知っていると言っていますが、理論や経験的な知識を求めています。
-NateJ

1
このブログ記事は役に立つかもしれません。brentozar.com/archive/2016/11/...
リッチベナー

回答:


13

はい、SQL Serverがそのインデックスからの統計情報がより正確/有用であると判断し、その統計情報を使用して推定を行い、計画を立てると、可能性があります。

SQL Serverが1つのインデックスの統計情報を使用し、別のインデックスをスキャン/シークすることを決定した状況に遭遇しました。

編集-これは、インデックスを無効にしていることに気付いたため、適用できない場合があります。私はそのシナリオをテストしていません。


明確で簡潔な応答をありがとう!ええ、いや、すぐに無効化されたわけではなく、ユーザーからの苦情/パフォーマンス低下の数秒前に無効化するまで有効化され、完全に「ライブ」になりました。あなたは良いです:)
NateJ

1
@NateJその理論はのCREATE STATISTICS代わりにテストされるかもしれませんCREATE INDEX
ヤクブカニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.