2016-05-03 45 views
1

我有一個查詢,立即得到結果沒有EXEC sp_executesql, 但當我使用sp_executesql sql server使用不同的executaion計劃,它需要超過5分鐘才能得到結果。sp_executesql使用錯誤的執行計劃

我也試過EXEC sp_updatestatsdbcc freeproccachesp_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

我的查詢是這樣的:'select count(*)from MyTable where col1 = @ p0 and col2 = @ p1' –