实体框架4 - 存储过程非常慢

Mal*_*ako 6 stored-procedures entity-framework sql-server-2008

从Management Studio执行时,存储过程以<0.1秒结束,但是当通过EF执行时,它需要超过2秒.

以下是分析器输出:

Profiler输出

有点讽刺的是,因为创建SP的原因是为了提高EF查询的性能大约需要1.2秒.

更新 无论值得什么,SP结果都映射到EF复杂类型.我打电话没有任何hocus pocus:

var menuTags = db.GetMenuTags(2, "en-US");
Run Code Online (Sandbox Code Playgroud)

EF生成的SQL是:

exec [dbo].[GetMenuTags] @CustTypeId=2,@LanguageId='en-US                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           '
Run Code Online (Sandbox Code Playgroud)

唯一的区别是EF添加到@LanguageId末尾的一堆空格,但它们不会影响性能.我在MSSMS中尝试了完全相同的SQL,它的工作原理与没有空格一样好.

K. *_*Bob 5

通过EF执行的SP总是返回所有行,这可能是延迟.

也许发布您的SP和原始EF生成的SQL将有所帮助

编辑添加似乎是解决方案

另一个想法(从过去的日子开始)参数嗅探是一个缓慢的SP的罪魁祸首,这个SP由一个开发人员运行,参数不好,然后设置了一个糟糕的执行计划.添加WITH RECOMPILE选项以基于合适的参数获得新计划将主要解决此问题.另一个例子是将传入的参数分配给本地sql变量(SP的本地变量),并且只在查询中使用局部变量.

现在你有一个体面的执行计划,你应该能够删除'WITH RECOMPILE',它仍然可以工作.参数嗅探问题很少见.

  • 另一个想法(从过去的日子开始)参数嗅探是一个缓慢的SP的罪魁祸首,这个SP由一个开发人员运行,参数不好,然后设置了一个糟糕的执行计划.添加WITH RECOMPILE选项以基于合适的参数获得新计划将主要解决此问题.另一个例子是将传入的参数分配给本地sql变量(SP的本地变量),并且只在查询中使用局部变量. (2认同)