UPDATE
Я думаю, что преждевременно спрашивать об этом. После нескольких тестов я обнаружил, что производительность не улучшилась. Я выполню еще несколько тестов и опубликую обновления здесь. До сих пор не удосужился ответить на этот вопрос.
У меня был такой запрос ...
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo
UNION
SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
Этот запрос выполняется вечно для большого набора данных. Я также добавил индекс CLUSTERED в столбец Id таблиц Temp, что дало некоторый прирост производительности, но завершить не удалось.
Я заменил этот запрос на этот ...
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo)
AND [Field_A] NOT IN (SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
Это завершено в секундах. Может кто-нибудь объяснить, что здесь произошло?
ОБНОВЛЕНИЕ:
Я думал, что оба запроса одинаковы. Это то, что мне нужно.
BusinessObject_Table has following Ids: 1, 2, 3
#BusinessObject_Table has: 3, 4, 5
TempTable has rows whose Field_A values are: 1, 2, 3, 4, 6
Результат запроса должен быть: 6 (Обратите внимание на изменение в запросе выше)
Я постараюсь получить планы запросов и опубликовать их здесь.