我们需要在索引重建发生时重新编译所有存储过程吗?

Sim*_*dri 1 sql sql-server

最近我在生产服务器上完成了重建索引.我是否需要重新编译所有现有的存储过程才能实现此功能.请建议.

kem*_*002 6

是的,您应该重新编译存储过程(您可以使用sp_recompile).更改表结构会强制执行新的执行计划,但只添加索引不会.当您重新启动Sql Server时,这将具有相同的效果.

来自MSDN:

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

  • @JNK - 不,不会。无论如何,重建都会通过完整扫描自动更新统计信息,因此您会因更新的统计信息而获得基于最优性的重新编译。无论如何,我认为这个答案中的引用并不正确。它与其他文档和测试相矛盾。我提出了[一个连接项](https://connect.microsoft.com/SQLServer/feedback/details/809771/recompile-a-stored-procedure-topic-contains-in Correct-assertion)来询问差异予以审查。 (2认同)