Sql 当索引重建发生时,我们是否需要重新编译所有存储过程?
最近,我在生产服务器上重建了索引。 我是否需要重新编译所有现有的存储过程以使其生效。Sql 当索引重建发生时,我们是否需要重新编译所有存储过程?,sql,sql-server,Sql,Sql Server,最近,我在生产服务器上重建了索引。 我是否需要重新编译所有现有的存储过程以使其生效。 请建议。是的,您应该重新编译存储过程(您可以使用)。更改表结构会强制执行一个新的执行计划,但仅仅添加一个索引不会。重新启动Sql Server时,将产生相同的效果 : 因为数据库是由这样的 添加索引或更改 索引列中的数据,原始 用于访问其表的查询计划 应通过以下方式再次进行优化: 重新编译它们。这种优化 第一次发生错误时自动发生 存储过程在SQL之后运行 服务器已重新启动。如果 所使用的基础表 存储过程将更改。
请建议。是的,您应该重新编译存储过程(您可以使用)。更改表结构会强制执行一个新的执行计划,但仅仅添加一个索引不会。重新启动Sql Server时,将产生相同的效果 : 因为数据库是由这样的 添加索引或更改 索引列中的数据,原始 用于访问其表的查询计划 应通过以下方式再次进行优化: 重新编译它们。这种优化 第一次发生错误时自动发生 存储过程在SQL之后运行 服务器已重新启动。如果 所使用的基础表 存储过程将更改。但是如果 将添加新索引,其中 存储过程可能会受益, 直到 下次调用存储过程时 在SQL Server重新启动后运行。在里面 在这种情况下,可以使用 强制存储过程 下次重新编译它时 执行
是的,您应该重新编译存储过程(您可以使用)。更改表结构会强制执行一个新的执行计划,但仅仅添加一个索引不会。重新启动Sql Server时,将产生相同的效果 : 因为数据库是由这样的 添加索引或更改 索引列中的数据,原始 用于访问其表的查询计划 应通过以下方式再次进行优化: 重新编译它们。这种优化 第一次发生错误时自动发生 存储过程在SQL之后运行 服务器已重新启动。如果 所使用的基础表 存储过程将更改。但是如果 将添加新索引,其中 存储过程可能会受益, 直到 下次调用存储过程时 在SQL Server重新启动后运行。在里面 在这种情况下,可以使用 强制存储过程 下次重新编译它时 执行 您的问题是关于“重建索引”,但您接受的答案中的引用是关于创建新索引的 重建索引还将使用fullscan在该索引上重新创建统计信息 作为更新的统计信息的结果,所有受影响的查询将自动获得基于优化的重新编译。除非查询恰好包含
KEEPFIXED PLAN
提示
此外,我不相信凯文答案中的引用是正确的(至少从SQLServer2008+开始)
以下两份白皮书都声明“向表或索引视图添加索引”将导致重新编译
CREATE TABLE T(X INT, Y INT);
GO
CREATE PROC P AS SELECT Y FROM T;
GO
EXEC P;
GO
CREATE NONCLUSTERED INDEX IX ON T(Y);
GO
EXEC P;
GO
DROP TABLE T;DROP PROC P
执行计划显示自动使用新索引
分析器显示原因为“架构已更改”的自动重新编译
您的问题是关于“重建索引”,但您接受的答案中引用的是关于创建新索引的内容
重建索引还将使用fullscan在该索引上重新创建统计信息
作为更新的统计信息的结果,所有受影响的查询将自动获得基于优化的重新编译。除非查询恰好包含KEEPFIXED PLAN
提示
此外,我不相信凯文答案中的引用是正确的(至少从SQLServer2008+开始)
以下两份白皮书都声明“向表或索引视图添加索引”将导致重新编译
CREATE TABLE T(X INT, Y INT);
GO
CREATE PROC P AS SELECT Y FROM T;
GO
EXEC P;
GO
CREATE NONCLUSTERED INDEX IX ON T(Y);
GO
EXEC P;
GO
DROP TABLE T;DROP PROC P
执行计划显示自动使用新索引
分析器显示原因为“架构已更改”的自动重新编译
不过,这也适用于重建吗?非常感谢Kevin,你能提供一些msdn的相关文章吗?请查看“来自msdn”的链接。应该链接到文章。@JNK-不,不会。重建将自动更新统计数据与全面扫描无论如何,所以你得到一个基于优化的重新编译,由于更新的统计数据。我认为这个答案中的引语无论如何都不正确。它与其他文档和测试相矛盾。我提出要求审查差异。@JNK-确认文档不正确,将进行更新。但这也适用于重建吗?非常感谢Kevin,你能提供一些有关此的msdn文章吗?请查看“来自msdn”的链接。应该链接到文章。@JNK-不,不会。重建将自动更新统计数据与全面扫描无论如何,所以你得到一个基于优化的重新编译,由于更新的统计数据。我认为这个答案中的引语无论如何都不正确。它与其他文档和测试相矛盾。我提出要求审查差异。@JNK-确认文档不正确,将进行更新。