我在SQL Server面临一个非常奇怪的问题,我有一个存储过程,我正在从C#代码执行该过程。该过程将返回一个数据表/数据集。
我的问题是,从C#代码/ ADO.NET代码执行过程需要花费太多时间(大约2分钟)。但是当我从SQL Server执行相同的查询时,它会在一秒钟内执行。
此外,我尝试使用相同的代码(旧的过程代码)创建新的过程,当我从ADO.NET执行这个新过程时,它不会花费太多时间。它正在C#中第二次执行。
所以我不知道我的旧程序有什么问题。
答案 0 :(得分:2)
我猜你从代码调用过程时有一个糟糕的执行计划。运行存储过程时,您将有一个不同的计划,因为默认情况下从SSMS运行时计划签名是不同的。
请参阅:http://www.sommarskog.se/query-plan-mysteries.html了解一些可能的修复和清晰度。
如果您的过程参数很重,那么每次使用时编译都是有意义的
option(recompile)
;