【发布时间】:2015-11-26 23:34:39
【问题描述】:
我正在使用 Entity Framework 6 执行一个非常复杂的查询,整个查询建立在 DbContext 提供的标准 IQueryable<> 接口之上。
尽管生成的查询非常复杂,但它在我的数据库服务器上执行只需几毫秒。所有执行的连接都是合理的,似乎都使用了正确的索引。
但是当我使用 dotTrace 分析应用程序时,我发现仅在 Entity Framework 准备执行计划时花费了大约 1-2 秒 (System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan)。
在这种情况下,实体框架似乎产生了太多的开销。甚至结果查询不会是错误的并且会在数据库服务器上执行错误。它是查询生成本身,这花费了太多时间。在使用任何 ORM 时,我从未遇到过此类问题。
我的问题是:是否有一些优化的可能性?在我为这个用例放弃 EF 之前,我可以尝试一些选项吗?
【问题讨论】:
-
你在使用 GroupJoins 吗?
-
嗨,汤姆,你解决了这个问题吗?
-
@kemsky 我用 SQL 重写了这部分,因为性能对我们来说很重要。
标签: c# sql-server performance entity-framework query-optimization