SQL Server:行目标如何影响相同的索引操作?

Jan*_*zen 7 sql-server optimization sql-server-2019 query-performance

我正在调整 SQL Server 2019 中的一些 SQL 性能,并且遇到了涉及行目标问题的一个查询问题。简化的查询是:

select TOP 1 ISNULL(RUNID,-1)
from T_PROCESS_MONITOR mon WITH (INDEX = IDX_T_PROCESS_MONITOR_RUNID)
WHERE 
        mon.SOURCE = 'Dynamic Export'
        AND
        mon.STATUS = 'PROCESSING'
Run Code Online (Sandbox Code Playgroud)

(索引提示只是为了强制优化器使用索引来匹配基准)

如果我通过另一个查询提示禁用行目标OPTION (MAXDOP 1, USE HINT('DISABLE_OPTIMIZER_ROWGOAL')),则查询的性能会显着不同(在这种情况下 MAXDOP 并不重要)。我知道行目标会影响估计的行数,并且基于此我认为它实际上会调整执行计划。但这里的情况并非如此。两个查询的执行计划完全相同,但没有行目标的执行计划要快得多(1 秒 vs 12 秒): 在此输入图像描述

有人可以向我解释一下有什么区别吗?因为尽管估计的行数不同,但两个索引扫描实际上从同一索引读取相同数量的行,然后我期望性能是相同的。

编辑:共享执行计划:

https://www.brentozar.com/pastetheplan/?id=rJ7R30o26