【发布时间】: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