【发布时间】:2020-11-09 14:26:22
【问题描述】:
我使用任一查询 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天后我取消了执行。
这是两个查询的估计执行计划:
我还有其他使用相同链接服务器的查询,这些查询不会花这么长时间。但显然链接服务器存在问题(远程扫描 98% 的时间)。我可以做些什么来降低远程扫描的成本?
【问题讨论】:
-
我过去曾遇到过链接服务器效率方面的问题。您是否尝试将
Document中的记录(可能通过插入临时表#)引入[linkedserver\sqlserver].[test]数据库,然后在那里运行DELETESQL 语句? -
您尝试过使用
OPENQUERY吗?大多数情况下,这会为您提供更好的执行时间。您还可能缺少外键列上的一些索引。您可以删除并重新创建外键以加快删除速度。但仅当您控制所有连接时。(单用户模式) -
批量删除?
DELETE TOP 1000...
标签: sql-server left-join sql-delete linked-server not-exists