当我运行以下代码时,它需要 22.5 分钟并进行 1.06 亿次读取。但是,如果我只运行内部 select 语句本身,它只需要 15 秒并执行 264k 读取。作为旁注,选择查询不返回任何记录。
知道为什么IF EXISTS它会运行更长时间并进行更多读取吗?我还更改了 select 语句,SELECT TOP 1 [dlc].[id]并在 2 分钟后将其杀死。
作为临时修复,我已将其更改为执行 count( * ) 并将该值分配给变量@cnt。然后它做一个IF 0 <> @cnt声明。但我认为EXISTS会更好,因为如果在 select 语句中返回了记录,它会在找到至少一条记录后停止执行扫描/搜索,而count(*)将完成完整查询。我错过了什么?
IF EXISTS
(SELECT [dlc].[ID]
FROM TableDLC [dlc]
JOIN TableD [d]
ON [d].[ID] = [dlc].[ID]
JOIN TableC [c]
ON [c].[ID] = [d].[ID2]
WHERE [c].[Name] <> [dlc].[Name])
BEGIN
<do something>
END
Run Code Online (Sandbox Code Playgroud)