私はたくさんのストアドプロシージャを開発していますが、その大部分にはwhere節があります。私に関する何ストアドプロシージャここでは多くのパラメータを含むステートメント
WHERE
(CE.EnquiryDate >= @StartDate or @StartDate is null) and
(CE.EnquiryDate <= @EndDate or @EndDate is null) and
(CE.ClientID = @ClientID or @ClientID is null)
パフォーマンスがあると計画がSPの最初の実行時にキャッシュされている場合のClientIDが、それは明らかに起こっている渡されたときにのみ、トラック、すなわちダウン潜在的原因の問題が発生した実行計画ClientIDが渡されず、StartDateとEndDateが異なる場合とは異なります。
複数のストアドプロシージャに分割したり、OPTION (RECOMPILE)
を使用して、実行ごとに新しい計画を立てる方が良いでしょうか?最良のアプローチが開発の初期段階にあるかどうかは不思議です。
を回避OR ...についての詳細はhttps://en.wikipedia.org/wiki/Boolean_algebraを参照してください。 –
Gordonに感謝しますが、動的SQLを行うよりもspの下に追加するだけで同じ効果がありませんか? – Philip
。 。それは試してみる価値があります。おそらく、SQL Serverでは、パラメータを使用して 'または'節を使用して 'where'節を最適化するほうが賢明になりました。 –