我在临时表中插入了一些 ID #A
,如下所示:
SELECT DISTINCT ID
INTO #A
FROM LocalDB.dbo.LocalTable1
WHERE ID NOT IN (SELECT DISTINCT ID FROM LocalDB.dbo.LocalTable2)
GO
CREATE INDEX TT ON #A(ID)
GO
我正在尝试使用我在前一阶段收集的标识符从远程链接服务器获取一些信息:
查询一:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
WHERE ID IN (SELECT ID FROM #A)
查询 2:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
INNER JOIN #A Y
ON X.ID = Y.ID
现在在下面的查询中,我正在做的是获取临时表的输出,复制行并将它们正确格式化为逗号分隔的列表,然后手动将其放入查询中。
查询 3:
SELECT ID, Desc
FROM RemoteLinkedServer.DB.dbo.RemoteTable X
WHERE ID IN (-- Put all identifiers here --)
查询1
和2
执行需要 2 小时,查询3
需要 0 秒(我的临时表包含大约 200 行)。我不知道发生了什么,也没有权限检查远程服务器是否在 ID 上有相关索引,但令人困惑的是,手动构建的查询立即运行,表明出现了问题在查询优化阶段。
关于这里出了什么问题或如何加快查询速度的任何想法?