2011-09-07 86 views
1
var ci = ctx.CI().Where(p => p.PId == pId); 

var result = ctx.RM().Where(p => p.R.D.PId == Id && p.MTId == mt.Id). 
Sum(p => (((p.M.TN * p.EC * p.F.PW * 52m) + (p.M.TN * p.EC * p.F.PY * (WW/52m))) 
/100m) * ci.FirstOrDefault(q => q.PId == p.R.PId.Value && q.FPId == p.R.FPId.Value).Factor); 

8000條記錄。查詢需要2000ms來加載,使用CI和RM加入。如何加快查詢速度

正如你所看到的,有6個表使用。 CC,RM,R,D,F和M.

模型是使用CodeFirst定義的,所以我使用EF 4.1。

我如何加快我的查詢運行速度超過2秒?

+0

什麼是生成的TSQL?您是否通過在SSMS中優化的基於計劃的查詢來運行已執行的TSQL?你可能會缺少索引。 – bzlm

回答

0

使用存儲過程,並將ef綁定到它的函數。

3

對於這樣的複雜查詢,我猜測很多時間都花在編譯查詢上。嘗試使用CompiledQuery以允許您重新使用預編譯查詢。

除此之外,您需要分析生成的SQL以查看執行計劃中何時花費的時間。有可能您可以通過一些良好的索引顯着提高性能。