Когда план выполнения изменяется для DELETE TOP(X) в Microsoft SQL Server?
Я наблюдаю немного странное поведение в Microsoft SQL Server 2017. Когда я DELETE
данные строка за строкой:
DELETE TOP(1)
FROM [table_A]
WHERE [id] IN (SELECT [i] FROM [table_B])
это займет около 4 минут. (База данных 11 ГБ)
но когда я выполню:
DELETE TOP(1000)
FROM [table_A]
WHERE [id] IN (SELECT [i] FROM [table_B])
на той же таблице выполнение выполняется очень быстро (<< 1 секунда).
Разница в плане исполнения.
Вопрос: как заставить SQL Server использовать план выполнения из второго оператора (DELETE TOP(**1000**) ...
) для первого утверждения (DELETE TOP(**1**) ...
)?
увидеть:
1 ответ
Вопрос: как заставить SQL Server использовать план выполнения из второго оператора (DELETE TOP (1000)...) для первого оператора (DELETE TOP (1)...)?
Вы можете вызвать определенный тип соединения с помощью подсказки:
DELETE TOP(1) FROM [table_A]
WHERE [id] IN (SELECT [i] FROM [table_B])
-- OPTION(LOOP JOIN);
-- OPTION(HASH JOIN);