Dot-Net
實體框架中的儲存過程很慢
我正在使用以下查詢從實體框架呼叫儲存過程(返回數據)
from sp in db.GetSale(bID, SID,m,y).Where(x => x.isActive == true) select sp如果我直接執行這個過程,只需要2秒,但是當我通過EF呼叫這個儲存過程時,需要10到15秒。
有什麼改善這種情況的指導嗎?我在 SO 上看到過其他文章,但沒有成功
編輯
這是我的程序的 sqlplan https://skydrive.live.com/redir?resid=87DCBD5D3E9AAA57!374
我懷疑參數嗅探。
嘗試在您的過程中應用反參數嗅探程式碼。(在使用它們之前將參數分配給局部變數)。
http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx
請記住,您的
.Where(x => x.isActive == true)過濾器不會應用於程序本身。當您處理表時,過濾器被傳遞給 where 子句並在數據庫上執行。在您的情況下,將執行 proc(不帶活動子句),完整的結果集將返回給應用程序,然後where將被應用。我知道你說 proc 更快,但你確定你沒有以某種方式將 isActive=true 作為參數傳遞給它嗎?
我看到你已經在這個 proc 上有了參數,所以如果你將狀態添加為另一個參數並在查詢級別應用它,它會提高你的性能。