クエリプランとクエリ全体: https://www.brentozar.com/pastetheplan/?id=BkgbANxN4
時間のかかるクエリに苦労しています。これの明らかな理由は、行数の誤った見積もりです。インデックス作成と統計の更新を試みましたが、クエリがまだ非常に遅くなるため、実際の問題には対処していないようです(インデックスまたは統計が間違っていると思います)。
私が必要としているのは、この情報を解釈して、クエリを最適化できるようにすることです。どのインデックス、どのDBCC関数または他の組み込み関数を実行間で実行して、キャッシュを確実にクリーンにし、間違った統計と新しい新しい統計の使用を避けるべきではないですか?
例は
DBCC FREEPROCCACHE
UPDATE STATISTICS *table*
同じクエリのもう1つのボトルネックは、これらのハッシュの一致です。右側のハッシュマッチは数秒以内に完了しますが、左側のハッシュマッチは最後の213行で多くの時間を費やしているようです。これらのハッシュの一致のどこに問題があるかを調べるにはどうすればよいですか?
また、バッチジョブで複数のメモリスピルを解決しようとしています。この場合、単一のテーブルからのメモリスピルを最適化することしかできません。
複数の並べ替えとハッシュ一致があり、複数のテーブルまたは「式」を含むかなり長いプローブと残差があり、SSISパッケージによって集約または設定されていると想定しています。
「最初」または「最後」の流出を最初に解決する必要がありますか?最初は「3つのトップ」であり、最後はリーフノード(演算子)に最も近くなります。以下に述べるいくつかの演算子についても疑問に思います。
実行プランの説明に関する用語の意味を説明してください。
私は次の用語を理解していると思います:
Order by:オペレーターがデータを必要とする順序
出力リスト:オペレーターが出力のために取得しているデータ
それはたくさんの質問です。
私はここにプローブ残差のあるハッシュマッチについて書きます: http://blogs.lobsterpot.com.au/2011/03/22/probe-residual-when-you-have-a-hash-match-a- hidden-cost-in-execution-plans / -ハッシュマッチのフィニッシングの問題は、ハッシュ自体よりも、そこから行をプルしているものに関連している可能性が高いです。
あなたの統計に関しては、問題はすべてのORです。 Seekは、最初のキーとしてKVID_Kontotypeがあり、その後にPeriodeStartDatoが続くインデックスでより効果的に機能する場合があります。次に、述語より前のすべての日付を対象に大きな範囲をスキャンし、すべての行をチェックしてKontotypeが正しいかどうかを確認する代わりに、適切な日付範囲で各Kontotypeを探します。おそらくより正確に推定されますが、基本的には必要なものを取得するために読み取る行が少なくなります。