我發現了一個有趣的問題,即存儲過程在Entity Framework中執行得非常緩慢。我已經解決了這個問題,但是我想聽聽有沒有人能告訴我爲什麼解決方案能夠工作。由於日期參數,實體框架中存儲過程緩慢
問題
我具有接收類型DATETIME的@date參數存儲過程GetLoginCount。當我直接在數據庫上執行這個存儲過程時,它會在一秒鐘內執行。當通過我的應用程序通過實體框架執行時,大約需要45秒。
我已經嘗試在存儲過程中使用WITH RECOMPILE並清除服務器上的執行計劃,以確保它沒有緩存一些執行計劃沒有使用正確索引的緩慢版本。
後的實驗2天快速前進,我發現,如果我只是把我的存儲過程的開頭如下:DECLARE @date1 DATETIME = @date
和使用@ DATE1相反,存儲過程執行在1秒內,也從實體框架。
爲什麼?
我已經解決了我的問題,這一切好的和罰款,但我需要知道爲什麼這個特定的解決方案工作。
如果使用字面日期時間進行嘗試而不是使用變量或參數,您是否可以確認性能?如果這太慢了[很可能需要更新統計信息](http://sqlinthewild.co.za/index.php/2011/03/22/statistics-row-estimations-and-the-ascending-date-column/ ) –
是的,如果我在我的存儲過程中使用@date代替日期而不是使用@date,它會很快執行。 –
並且您正在測試的計劃清除後,您作爲參數傳遞相同的字面值?分配給變量並使用變量禁用參數嗅探。即SQL Server不再具有特定的日期,它可以在統計信息中查找以獲得選擇性估計值,並根據'未優化的未知值'猜測。 –