SQL Server - 存储过程与“Giant”脚本相比较慢

时间:2014-04-14 14:19:43

标签: sql-server stored-procedures

我有大量需要按顺序执行的存储过程(大约200个)。理想情况下,我想创建一个单一的#34; master"存储过程将一个接一个地执行每个单独的存储过程。

但是,当我执行主存储过程时,它会在运行很长时间后一直冻结。话虽这么说,如果我从200个单独的存储过程中获取所有SQL代码并创建一个巨大的SQL脚本文件,它运行时没有任何问题。

SQL代码查询单独的表并将数据的子集插入到主"摘要"表

为什么会发生这种情况的任何想法?存储过程是否存在更多内存?我更愿意将所有内容保存在存储过程中,以便我们可以更轻松地管理安全性和更新。

1 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况的任何想法?

编制。

主脚本可能是使用此时有效的统计数据批量编译的。

SP将在开始时编译一次,如果统计信息在运行期间发生变化 - 这对于一系列负载来说是典型的 - 那么你就去了。特别是如果在处理期间统计变化是显着的。基本上,开始时的统计数据 - 当编译事物时 - 与某些表的运行时统计数据完全相比。

有一个重新编译选项,您可以选择单独的语句来避免这种情况。