Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 重新编译存储过程_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql 重新编译存储过程

Sql 重新编译存储过程,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我在一些表中添加了非聚集索引 我是否需要重新启动或重新编译所有存储过程以获得新索引的好处 如何做到这一点?是的。您需要重新编译存储过程以利用新索引 有一个完整的解释不,你不需要。当存储过程试图从您的表中获取数据时,查询优化器将看到您的一些表有一个索引,它将构建相应的执行计划,然后将该计划传递给执行引擎,以便执行 您需要重新编译存储过程(触发器、函数),但不需要逐个编译,您可以使用sp\u重新编译“TableName”,SQL将重新编译所有存储过程、引用您的表并从新索引中获益的触发器(而且您不会错

我在一些表中添加了非聚集索引

我是否需要重新启动或重新编译所有存储过程以获得新索引的好处


如何做到这一点?

是的。您需要重新编译存储过程以利用新索引


有一个完整的解释

不,你不需要。当存储过程试图从您的表中获取数据时,查询优化器将看到您的一些表有一个索引,它将构建相应的执行计划,然后将该计划传递给执行引擎,以便执行

您需要重新编译存储过程(触发器、函数),但不需要逐个编译,您可以使用
sp\u重新编译“TableName”
,SQL将重新编译所有存储过程、引用您的表并从新索引中获益的触发器(而且您不会错过一个)


后续:我离开我的帖子-这仍然是BOL的答案-但正确的答案似乎是:不,你没有(见其他帖子)

看到可能重复的“是”,最后它使用了索引..只是不确定它在production@Akon-我编辑了我的答案,因为我错了!查看链接。这是正确答案。您可能需要做的最多的事情是使用
DBCC FREEPROCCACHE
@RBarryYoung刷新缓存的查询计划-我的想法也是如此,直到我阅读了页面上的BOL引用。知道那是什么意思吗?这与测试和2008年版的规定相矛盾,2008年版的规定是“将索引添加到表或索引视图中。”这将导致重新编译。sql内部说…“将索引添加到表或索引视图中…是正确性重新编译的原因(p543).BOL无最新信息?@Alain_Deloin-这是我的结论。@rbaryyoung-微软回应说文档确实是错误的,将予以更正。