Mal*_*ako 6 stored-procedures entity-framework sql-server-2008
从Management Studio执行时,存储过程以<0.1秒结束,但是当通过EF执行时,它需要超过2秒.
以下是分析器输出:

有点讽刺的是,因为创建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,它的工作原理与没有空格一样好.
通过EF执行的SP总是返回所有行,这可能是延迟.
也许发布您的SP和原始EF生成的SQL将有所帮助
编辑添加似乎是解决方案
另一个想法(从过去的日子开始)参数嗅探是一个缓慢的SP的罪魁祸首,这个SP由一个开发人员运行,参数不好,然后设置了一个糟糕的执行计划.添加WITH RECOMPILE选项以基于合适的参数获得新计划将主要解决此问题.另一个例子是将传入的参数分配给本地sql变量(SP的本地变量),并且只在查询中使用局部变量.
现在你有一个体面的执行计划,你应该能够删除'WITH RECOMPILE',它仍然可以工作.参数嗅探问题很少见.
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |