我正在使用 Entity Framework 6 执行一个非常复杂的查询,整个查询基于标准 IQueryable<>
构建DbContext
提供的界面.
尽管生成的查询非常复杂,但它在我的数据库服务器上的执行时间为几毫秒。所有执行的连接都是合理的,似乎都使用了正确的索引。
但是当我使用 dotTrace 分析应用程序时,我发现在 Entity Framework 准备执行计划 (System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan
) 时花费了大约 1-2 秒。
在这种情况下, Entity Framework 似乎产生了过多的开销。甚至不是生成的查询会很糟糕并且会在数据库服务器上执行错误。它是查询生成本身,这花费了太多时间。我以前在使用任何 ORM 时从未遇到过此类问题。
我的问题是:是否有可能对此进行优化?在我为此用例放弃 EF 之前,是否有一些我可以尝试的选项?
最佳答案
一种可能性(如果可以的话)是使它成为一个存储过程(可能带有您在执行时传递的输入参数)。存储过程的执行计划在保存时生成并保留;如果架构发生变化,也可以自动重新生成。
在这种情况下期望在运行时生成如此复杂的执行计划是不现实的。
关于c# - Entity Framework 6 - GetExecutionPlan 性能命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336563/