我正在開發大量的存儲過程,並且其中大多數存在與以下類似的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)
我關心的是性能,只有當一個clientId傳遞則顯然會被潛在的產生導致問題走下賽場,也就是說,如果一個計劃是在SP上的第一次執行緩存執行計劃與不傳遞ClientID並且StartDate和EndDate是不同的。
我在這裏最好把這些分成多個存儲過程或使用OPTION (RECOMPILE)
在每次運行中得到一個新的計劃?只是想知道最好的方法是在發展的早期階段。
您可以使用'選項(重新編譯)動態SQL'以確保每次運行一個最優的執行計劃。 –
感謝Gordon,但是在將它添加到sp的底部而不是具有執行動態SQL的效果方面沒有相同的效果? – Philip
。 。值得一試。也許SQL Server更聰明地用''或'''子參數來優化where子句。 –