2017-03-09 35 views
2

我正在使用PetaPoco數據訪問層。
所以調用存儲過程時,同時通過所有的值
我得到這個SQL事件探查具有不同參數類型的存儲過程查詢計劃

exec sp_executesql N'EXEC dbo.[sp_GetProducts] @0 , @1',N'@0 int,@1 int',@0=316,@1=5 

,但路過的時候沒有確定NULL的類型,其默認值爲爲nvarchar(4000)一樣,工作正常

exec sp_executesql N'EXEC dbo.[sp_GetProducts] @0 , @1',N'@0 int,@1 nvarchar(4000)',@0=316,NULL 

我的問題是關於性能,我們是否因爲存儲過程有2個查詢計劃而失去性能?或兩個電話使用相同的計劃?

謝謝

回答

1

是的,這可能會有性能差異。由於您傳遞了不同的參數集,因此可能不會使用相同的計劃。這與Parameter Sniffing的概念有關。

如果一個SQL查詢具有參數,SQL Server創建針對他們提高性能的執行計劃 ,通過這個過程被稱爲 「參數嗅探」。這個計劃被存儲和重用,因爲它通常是最好的執行計劃 。只是偶爾,它不是,然後你可以打到性能問題

有幾種方法可以解決這個問題,在我提供的鏈接中突出顯示。請參閱部分如何處理參數嗅探。可能的選項是使用存儲過程中的With Recompile選項,或者通過更改參數值在存儲過程中的使用方式或通過創建多個存儲過程來禁用參數嗅探。

相關問題