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来加载这样做,4000使用CI和RM上的连接。
如您所见,使用了6个表。 CC,RM,R,D,F和M.
模型是使用CodeFirst定义的,所以我使用的是EF 4.1。
如何加快查询速度,使其运行速度超过2秒?
答案 0 :(得分:3)
对于像这样的复杂查询,我猜测很多时间都花在编译查询上。尝试使用CompiledQuery
允许您重用预编译的查询。
除此之外,您还需要分析生成的SQL,以查看执行计划中花费的时间。通过一些有良好位置的指数,您可以显着提高性能。
答案 1 :(得分:0)
使用存储过程,并将ef绑定到它的函数。