我有一个存储过程,该过程在SQL Server上的作业中每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一起使用是最佳选择吗?
答案 0 :(得分:1)
如果在SQL Server Management Studio中使用Include Actual Execution Plan
选项,则会看到将IF
表达式评估为false
时,其主体的运算符未包括在执行计划中。
因此,无需担心-SQL引擎将使用正确的执行计划,并且不会接触数据。
recompile选项在某些查询中可能会有所帮助,但我相信您现在可以跳过它。