这严格是SQL Server内部操作。 当数据库进行诸如添加索引或更改索引列中的数据等操作时,用于访问其表的原始查询计划应通过重新编译进行优化。 这里是关于重新编译存储过程的MSDN文章:http://msdn.microsoft.com/en-us/library/ms190439.aspx 当您发出 ALTER PROC 语句时,也会导致存储过程的重新编译。
使用Recompile会使SQL Server重新编译SP,因此数据库引擎将创建新的执行计划,而不是使用相同SP的现有计划。它可以是自动化和手动过程,具体取决于您的要求。您可以在SP中包括RECOMPILE“提示”,以便每次执行时都重新编译SP。或者运行Exec sp_recompile N'yourSP'进行手动重新编译。正如@Michael所提到的,太多的重新编译可能非常糟糕,因为对于每个编译,数据库引擎必须创建新的执行计划,这可能是昂贵的操作。因此,通常应避免自动重新编译SP,甚至在生产环境中使用手动重新编译之前,应首先在开发环境中进行测试,以确保它确实有所帮助。