2011-09-07 65 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以查看执行计划中何时花费的时间。有可能您可以通过一些良好的索引显着提高性能。