Запрос на удаление SQL занимает слишком много времени

Я использую любой запрос 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% времени). Что я могу сделать, чтобы снизить стоимость удаленного сканирования?


person user1673665    schedule 20.07.2020    source источник
comment
В прошлом у меня были проблемы с эффективностью связанных серверов. Пробовали ли вы перенести записи из Document (возможно, путем вставки во временную таблицу #) в базу данных [linkedserver\sqlserver].[test], а затем запустить там свой DELETE оператор SQL?   -  person JoeFletch    schedule 20.07.2020
comment
Вы пробовали использовать OPENQUERY ? В большинстве случаев это дает лучшее время выполнения. Вы также можете отсутствовать некоторые индексы в столбцах внешнего ключа. Вы можете удалить и воссоздать внешние ключи, чтобы ускорить удаление. Но только когда вы контролируете все соединения. (Однопользовательский режим)   -  person Preben Huybrechts    schedule 20.07.2020
comment
Удалять пачками? DELETE TOP 1000...   -  person Max♦    schedule 20.07.2020


Ответы (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
person gotqn    schedule 20.07.2020