在SQL Server上“重新编译”存储过程意味着什么?

时间:2011-07-07 22:50:20

标签: sql sql-server

在SQL Server上“重新编译”存储过程意味着什么? 这应该是手动过程还是自动过程? 这个过程的优点和缺点是什么? 谢谢!

2 个答案:

答案 0 :(得分:7)

它严格来说是SQL Server中的内部操作。

  

由于通过添加索引或更改索引列中的数据等操作更改了数据库,因此应通过重新编译来再次优化用于访问其表的原始查询计划

这是MSDN's article on Recompiling Stored Procedures

当您发出ALTER PROC语句时,您还会导致重新编译存储过程。

答案 1 :(得分:2)

使用重新编译使SQL Server重新编译为SP,因此数据库引擎不会使用相同SP的现有计划,而是创建新的执行计划。

根据您的要求,它可以是自动和手动过程。每次执行SP时都可以通过在SP中包含RECOMPILE“提示”来重新编译SP。或者运行

执行sp_recompile N'yourSP'

手动重新编译。

正如@Michael所提到的,太多的重新编译可能非常糟糕,因为每个编译数据库引擎都必须创建新的执行计划,这可能是昂贵的操作。所以一般应该避免自动重新编译SP,甚至手动重新编译也应该先在开发环境中进行测试,然后才能使用它来确保它真的有用。