Linq 如何加快查询速度

Linq 如何加快查询速度,linq,linq-to-entities,Linq,Linq To Entities,8000条记录。以这种方式加载查询需要2000毫秒,在CI和RM上使用join需要4000毫秒 如您所见,共使用了6个表格。CC、RM、R、D、F和M 模型是使用CodeFirst定义的,所以我使用EF4.1 如何将查询的运行速度提高到2秒以上?使用存储过程,并将ef绑定到它的函数。对于这样一个复杂的查询,我猜大部分时间都花在编译查询上。尝试使用CompiledQuery以允许重用预编译的查询 除此之外,您还需要分析生成的SQL,以查看在执行计划中花费的时间。有可能通过几个位置合适的索引可以显著

8000条记录。以这种方式加载查询需要2000毫秒,在CI和RM上使用join需要4000毫秒

如您所见,共使用了6个表格。CC、RM、R、D、F和M

模型是使用CodeFirst定义的,所以我使用EF4.1


如何将查询的运行速度提高到2秒以上?

使用存储过程,并将ef绑定到它的函数。

对于这样一个复杂的查询,我猜大部分时间都花在编译查询上。尝试使用
CompiledQuery
以允许重用预编译的查询


除此之外,您还需要分析生成的SQL,以查看在执行计划中花费的时间。有可能通过几个位置合适的索引可以显著提高性能。

生成的TSQL是什么?您是否通过SSMS中优化的基于计划的查询运行执行的TSQL?您可能缺少索引。
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);