インデックスを削除して再作成することで、本番パフォーマンスの問題を修正しました。インデックスを削除すると、それを使用した実行プランも削除されたと思います。
不正な実行計画を支持する引数:
sp_executesql
から実行されたselectステートメントでした。 sp_executesql
なしで同じselectステートメントを実行すると高速でしたが、同じ実行プランを使用しませんでした。不正な実行計画に対する引数:
dbcc freeproccache
を実行して悪い計画をすべてクリアしましたが、これによってパフォーマンスの問題が修正または変更されることはありませんでした。注:
遅いクエリは、日付でインデックス付けされたテーブルを使用しています。ただし、各日付のレコード数には大きな違いがあります。つまり、特定の日付は数レコードから10万を超える範囲であり、かなりランダムです。
データベースは互換性レベル140(SQL Server 2017)で実行されています
問題の原因は、悪い計画または古いインデックスでしたか?
それが悪い計画である場合、なぜdbcc freeproccache
がそれを取り除くのに機能しなかったのですか?
私の知る限り、これは悪い計画のように見えましたが、どういうわけかdbcc freeproccache
は機能しませんでした。だから、私は暗闇の中で、全体の状況について混乱しています。
なぜ両方ではない?不正な統計を含む古いインデックスは、不正な計画を生成させる可能性があります。