简介
选项(重新编译) SQL Server 中的 ) 子句一直被认为是一项昂贵的操作,但它包含在某些查询可以显着提高性能。这个悖论让很多开发者感到困惑,引发了对底层机制以及 OPTION (RECOMPILE) 在什么情况下真正有利的疑问。
问题
一位开发者遇到的问题一种异常情况,向查询添加 OPTION (RECOMPILE) 会使其执行时间从五分钟多缩短到半秒。无论查询是从查询分析器执行还是通过使用 SqlCommand.ExecuteReader() 的 C# 应用程序执行,此行为都会持续存在。查询调用始终使用相同的参数,以消除对次优参数嗅探的任何担忧。
解释
与 OPTION (RECOMPILE) 始终为的假设相反这是一项昂贵的操作,但在特定情况下可能是有益的。一种常见的解释是,当底层数据或参数发生显着变化时,需要重建执行计划。
当 SQL Server 创建存储过程(或任何参数化查询)时,它会根据存储过程(或任何参数化查询)缓存最高效的执行计划。初始数据和参数。但是,使用不同数据或参数的后续执行可能不再与缓存的执行计划保持一致。在这种情况下,使用 OPTION (RECOMPILE) 重新编译执行计划会强制 SQL Server 针对当前条件对其进行优化,这可能会带来更好的性能。
在所呈现的特定情况下,开发人员应考虑重建查询的执行使用 sp_updatestats 计划和更新统计信息。此过程可确保缓存的执行计划基于最新信息,从而减少每次执行时重新编译的需要。
关键要点
以上是OPTION (RECOMPILE) 何时会使 SQL 查询速度出奇地快?的详细内容。更多信息请关注PHP中文网其他相关文章!