0

実行プランは常に100%の結果を生成しますが、どのセクションで最も高いパーセンテージが必要かという経験則はありますか?

たとえば、SELECTステートメントを実行すると、次のことがわかります。

03% Hash Match
02% Hash Match
10% Hash Match
01% RID Lookup
09% RID Lookup 
04% Index Seek
07% Index Seek (Nonclustered)
01% Clustered Index seek
18% Clustered Index seek
35% Key lookup (Clustered)
01% Nested Loops 

あなたはその考えを理解します。1つか2つ残してしまったら許してください。だから私の質問は:それは良いかどうか?SELECTステートメントを試してみると、統計は変わると思いますが、常に100になるので、どのカテゴリを最も高いパーセンテージにしたいのかわかりません。

4

1 に答える 1

4

「クラスター化されたインデックスシークに100%プッシュする」という目標は実際にはありませんが、最も高価な演算子に焦点を当て、それらをより効率的にしようとする必要があります。つまり、もちろん、クエリがそもそもパフォーマンスの問題を示している場合です。どのクエリプランでも常に「最も高価な」演算子が存在しますが、クエリ全体のコストはどれくらいですか?あなたはあなたの最も重い打者に時間を費やしていますか?どうして知っていますか?または、その35%の演算子を見て、すでに2ミリ秒で実行されているクエリから余分なナノ秒を絞り出そうとしていますか?

また、このための推定実行計画に依存しないでください。実際の計画を生成します(見積もりに関する情報も含まれ、SQL Serverからどれだけ離れているかがわかります)。

特定のケースに対する1つのコメント:RIDまたはキールックアップを取り除くためにできることを実行したい。これは、クラスター化インデックスをヒープに追加する可能性があり(ヒープの有効なユースケースがありますか?)、クラスター化インデックスを使用してテーブルの既存のインデックスを追加または変更する可能性があることを意味します。

GrantFritcheyの無料の電子書籍であるSQLServer実行計画を入手することを強くお勧めします。

http://www.sqlservercentral.com/articles/books/65831/

また、 SQL SentryPlanExplorerをダウンロードして試してみることを強くお勧めします。SSMSショープランには、プランの問題をより迅速に特定して修正するのに役立ついくつかの利点があります。

  • 最も高価な演算子のカラースケール
  • CPU、I / O、またはその両方ごとのコスト内訳を表示する
  • 常に%を正しく取得します(SSMSが100%を超える場合が多い
  • 交換に関するより意味のある情報を表示します(より決定論的な線幅、およびツールチップを調べることなく行数またはデータサイズを表示します)
  • 推定行と実際の行の違いを強調する
  • ルックアップなどの高価な演算子を強調表示します(インデックスから欠落している列を特定します)
  • 実際の計画を生成するときに、CPU/期間/読み取りなどの実行時メトリックを含めます
  • そして、私がここで詳しく説明しない他のたくさんの機能...

免責事項:私はSQLSentryで働いています

于 2013-01-11T17:04:13.707 に答える