sql - 选项 "WITH RECOMPILE"可用于减少阻塞超时吗?

标签 sql sql-server sql-server-2008 sql-server-2012 recompile

我正在制定从不再在公司工作的人那里继承的更新程序。

我发现程序在 header 后包含 WITH RECOMPILE 选项。在注释中它说添加它是“为了减轻阻塞造成的超时”

ALTER PROC ups_SomeProc (@pMyParameter INT) WITH RECOMPILE
AS
BEGIN

根据我的经验,我从未听说过 WITH RECOMPILE 选项有助于阻止,甚至与阻止以任何方式相关。

我是否对这个选项缺少一些理解,或者实现它的人对它的作用感到困惑?有人听说过这个作为阻止的解决方案吗?

注意:这是在服务器仍在运行 SQL Sever 2008 版本时完成的。

最佳答案

OPTION WITH RECOMPILE 强制 Sql Server 重新编译执行计划,即使内存中缓存了现有计划。

如果底层数据发生巨大且非常快的变化,则缓存的执行计划的效率就会降低。因此,在这种情况下,使用 WITH RECOMPILE 选项执行过程的速度比使用已编译的执行计划的执行速度要快得多。

我猜测开发人员/人员在执行存储过程时经历了一些长时间的延迟。当他使用 WITH RECOMPILE 选项时,它的执行速度更快。所以也许他认为在没有重新编译选项的情况下执行这个过程会导致阻塞。 :) 有趣的故事,但我认为这就是发生的事情。

关于sql - 选项 "WITH RECOMPILE"可用于减少阻塞超时吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157682/

相关文章:

c++ - 如何摆脱使用但未定义的标签

MySQL:如何多次加入同一张表?

php - 使用 php 和 time() 仅显示 mysql 数据库中的某些项目

sql - 为什么我要在默认目录旁边创建另一个目录?

sql-server-2008 - 如果所有行都为空,则隐藏列

mysql - 如何从 2 个 MySQL 表中进行 JOIN 到 SELECT 操作?

SQL逆透视多列数据

sql - 每个 SQL Server 外键都应该有一个匹配的索引吗?

sql - 返回存储过程中 OUTPUT 参数的值

visual-studio-2008 - 我应该先安装哪个 : Visual Studio 2008 or SQL Server 2008?