【问题标题】:Stored procedure execution plan WITH RECOMPILE存储过程执行计划 WITH RECOMPILE
【发布时间】:2020-10-15 03:27:36
【问题描述】:

我有一个存储过程,它在 SQL 服务器上的作业中每 5 分钟运行一次。该作业将运行 80% 的时间而没有结果,这是意料之中的,但是当它确实有数据要处理时,这是一个非常长的过程。 代码如下简化。

IF exists (Select top 1 col1 from tbl1 where processed = '0' )
BEGIN
    HUGE PROCESS with multiple selects joins and updates
END

执行计划将如何评估此 SP?与 WITH RECOMPILE 一起使用是最佳选择的情况很少见吗?

【问题讨论】:

  • 你真正想要完成什么?
  • 更好地理解执行计划——当存储过程确定如此大的差异时,如何在存储过程中使用 if 语句。使用 WITH RECOMPILE 或 OPTION (RECOMPILE) 可以在限制情况下产生更好的执行计划,如果它执行这些情况的参数是什么。
  • 这对于一个问题来说太宽泛了。我建议您阅读所有这些内容,分析您的执行计划,然后在出现您不理解的情况时提出具体问题。

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

如果您在 SQL Server Management Studio 中使用Include Actual Execution Plan 选项,您将看到当IF 表达式被计算为false 时,其主体的运算符不包含在执行计划中。

所以,不用担心——SQL 引擎会使用正确的执行计划,不会触及数据。

recompile 选项在特定查询中可能会有所帮助,但我相信您现在可以跳过它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2010-10-05
    • 1970-01-01
    • 2021-11-11
    • 2015-09-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多