Я использую любой запрос 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]
, а затем запустить там свойDELETE
оператор SQL? - person JoeFletch   schedule 20.07.2020OPENQUERY
? В большинстве случаев это дает лучшее время выполнения. Вы также можете отсутствовать некоторые индексы в столбцах внешнего ключа. Вы можете удалить и воссоздать внешние ключи, чтобы ускорить удаление. Но только когда вы контролируете все соединения. (Однопользовательский режим) - person Preben Huybrechts   schedule 20.07.2020DELETE TOP 1000...
- person Max♦   schedule 20.07.2020