我正在使用Entity Framework 6执行一个非常复杂的查询,整个查询构建在标准的IQueryable<>上.界面由DbContext提供.
即使生成的查询非常复杂,它也会在数据库服务器上以几毫秒的速度执行.所有执行的连接都是合理的,似乎它都使用了正确的索引.
但是当我使用dotTrace分析应用程序时,我发现实体框架正在准备执行计划(System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan)时花费大约1-2秒.
在这种情况下,实体框架似乎产生了太多的开销.它甚至不会导致生成的查询错误并且会在数据库服务器上执行错误.它是查询生成本身,这花费了太多时间.在使用任何ORM时,我从未遇到过这种类型的问题.
我的问题是:是否有一些优化的可能性?在我放弃EF用于此用例之前,我可以尝试一些选项吗?
最佳答案 一种可能性(如果可以)是使存储过程(可能具有在执行时传递的输入参数).存储过程的执行计划在保存时生成并保留;如果发生架构更改,也可以自动重新生成.
在这种情况下,期望在运行时生成这样一个复杂的执行计划是不现实的.