2016-05-03 12 views
1

EXEC sp_executesql,なしですぐに結果を取得するクエリがありますが、sp_executesqlを使用するとSQL Serverは別のexecutaion計画を使用し、結果を得るのに5分以上かかります。sp_executesqlは間違った実行計画を使用します

私もEXEC sp_updatestatsdbcc freeproccacheを試しましたが、sp_executesqlは間違った実行計画を選択しました。

OPTION (RECOMPILE)を使用すると、すぐに結果が得られますが、すべてのクエリでOPTION (RECOMPILE)を使用したくありません。

sp_executesqlに適切な実行計画を選択するにはどうすればよいですか?

+0

'sp_executesql'を使用せずにどのような計画を使用しますか?それにはどのような計画がありますか?時差の原因となる違いは何ですか?また、入力されるパラメータの違いはありますか? – TZHX

答えて

1

私のインデックスがを濾過し、インデックスsp_executesqlを使用することはできませんそれはそうですフィルタリングされたインデックス!私は私のインデックスからフィルタを削除し、それを再作成し、私の問題は解決されました。

0

説明している問題はおそらくparameter sniffingの結果です。あなたは、このトピックにこれらの既存の投稿のいくつかをチェックアウトする必要があります:

+1

ありがとう、私たちは異なるパラメータを使用しますが、私のパラメータはすべてのテストで同じであり、キャッシュをクリアした後でも、sp_executesqlは間違った計画を選択します。 –

+0

@BanafsheAlipourあなたの質問を表示できますか?それは "すべてをキャッチ"ロジックを持っていますか? 'col = @ pや@pがnullの場合 'のように? –

+0

私のクエリは次のようなものです: 'MyTableからselect count(*)where col1 = @ p0、col2 = @ p1' –

関連する問題