【问题标题】:Does Sql Server cache stored procedure execution plans when calling from c#?从 c# 调用时,Sql Server 是否缓存存储过程执行计划?
【发布时间】:2014-04-17 03:25:10
【问题描述】:

我在 foreach 循环中执行一个带有一个参数的存储过程。我得到结果并在那之后做一些额外的处理。代码如下:

foreach(var id in GetIds())
{
    var result = ExecuteStoreProcedureForResult(id);
    //do extra processing with the result
}

当我第一次直接从查询分析器执行 sp 时,需要 4-5 秒。之后每次查询都会以毫秒为单位返回,即使使用不同的 ID 参数——也比第一次快得多。

我的问题是,如果我从代码中执行这个 sp,查询计划是否会被缓存并在第一次执行后更快地返回结果。和查询分析器一样吗?

我打开连接一次,对每个参数执行sp,最后关闭连接。这会有所作为吗?

感谢所有建议。

【问题讨论】:

  • 查询分析器指示不再支持的 Sql Server 2000。仍然使用那个版本的Sql Server是不负责任的。在更高版本中,您可以使用 Sql Server Management Studio 进行连接。

标签: sql-server ado.net


【解决方案1】:

Query execution caching 是在SQL server 级别完成的,不管哪种编程语言调用stored procedure

至于建议,你应该可以多次运行SP,我建议你不要自己关闭连接。你没有显示代码,但我建议你利用IDisposable而不是手动打开并且每次都关闭连接,这可能会非常昂贵。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2011-11-07
    • 2012-02-18
    相关资源
    最近更新 更多