SQL删除查询花费的时间太长

时间:2020-07-20 10:41:35

标签: sql-server left-join sql-delete linked-server not-exists

我使用任一查询1:

    delete dp
    from [linkedserver\sqlserver].[test].[dbo].[documentpos] dp
    where not exists (
    select 1 from document d where d.GUID = dp.documentguid
    )

或查询2:

    DELETE cqdp 
    FROM [linkedserver\sqlserver].[test].[dbo].[documentpos] cqdp
    left join Document cqd on cqd.GUID = cqdp.DocumentGUID
    where cqd.guid is null

两个查询都执行相同的操作,但是花费的时间太长。 2天后我已取消执行。

这是两个查询的估计执行计划:

estimated execution plan enter image description here

我还有其他一些查询,它们使用相同的链接服务器,并且查询时间不长。但显然链接服务器存在问题(98%的时间进行远程扫描)。我该如何减少远程扫描的成本?

1 个答案:

答案 0 :(得分:1)

尝试一下:

 SELECT DISTINCT GUID
 INTO [linkedserver\sqlserver].[test].[dbo].[temp_guids]
 FROM document 
  

DELETE cqdp 
FROM [linkedserver\sqlserver].[test].[dbo].[documentpos] cqdp
left join [linkedserver\sqlserver].[test].[dbo].[temp_guids] cqd on cqd.GUID = cqdp.DocumentGUID
where cqd.guid is null