2012-10-03 209 views
4

我調用存儲過程(即返回數據)使用以下存儲過程是緩慢的實體從實體框架框架

from sp in db.GetSale(bID, SID,m,y).Where(x => x.isActive == true) 
select sp 

查詢如果我直接運行這個程序,只需要2秒,但是當我通過EF調用這個存儲過程,它需要10到15秒。

任何指導改善情況?我在這裏就沒有見過這樣的其他職位,但都沒有成功

編輯

這裏是sqlplan我的程序 https://skydrive.live.com/redir?resid=87DCBD5D3E9AAA57!374

+0

它會返回多少行? –

+0

有兩個主要表涉及一個有33K和其他有48K行。在結果中,我有134名員工在分組後出售。我還在外鍵列中添加了索引 – Tassadaque

+0

如果我直接執行過程,則需要3秒。但正如我從實體框架稱它需要很長時間 – Tassadaque

回答

1

記住,你的.Where(x => x.isActive == true)過濾器不應用到程序本身。在處理表時,過濾器將傳遞給where子句並在數據庫中執行。在你的情況下,proc將被執行(沒有活動條款),完整的結果集將被返回到應用程序,之後將應用where

我知道你說proc更快,但你確定你不是以某種方式將isActive = true作爲參數傳遞給它嗎?

我看到你已經有了這個過程的參數,所以也許如果你添加狀態作爲另一個參數,並在查詢級別應用它,它會提高你的性能。