添加SQL Server索引,但是如何仅重新编译受影响的存储过程?

问题描述

您可以执行sp_recompile并提供刚刚建立索引的表名。依赖于该表的所有proc将从存储的proc缓存中清除,并在下次执行时“编译”

从msdn文档中看到此内容sp_recompile(Transact-SQL)

解决方法

我需要向表中添加索引,并且只想重新编译/引用该表的所有存储过程。有什么快速简便的方法吗?

编辑:

从SQL Server 2005联机丛书中,重新编译存储过程:

当通过添加索引或更改索引列中的数据等操作更改数据库时,应通过重新编译来再次优化用于访问其表的原始查询计划。重新启动Microsoft SQL Server
2005后,第一次运行存储过程时,会自动自动进行此优化。如果存储过程使用的基础表发生更改,也会发生这种情况。
但是,如果添加了新索引,存储过程可能会从中受益,那么直到重新启动Microsoft SQL Server之后下一次运行存储过程时,优化才会发生。
在这种情况下,强制存储过程在下次执行时重新编译可能会很有用。

迫使存储过程重新编译的另一个原因是,在必要时抵消存储过程编译的“参数嗅探”行为。当SQL
Server执行存储过程时,该过程在编译时使用的任何参数值都将包含在生成查询计划中。如果这些值代表随后调用过程的典型值,则存储过程在每次编译和执行时都会从查询计划中受益。否则,性能可能会受到影响