ОБНОВЛЕНИЕ
Я думаю, что преждевременно спрашивать об этом. После нескольких тестов я узнал, что производительность не улучшилась. Я буду выполнять еще несколько тестов и опубликовать обновления здесь. До этого не беспокойтесь, чтобы ответить на это.SQL Query UNION Performance
У меня был запрос, как это ...
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 (изменить примечание в приведенном выше запросе)
Я постараюсь, чтобы получить планы запросов и пост их здесь.
Пожалуйста, опубликуйте планы. Запросы все равно делают разные вещи. Второй проверяет, что он не отображается в обеих таблицах. Первая таблица. Первому нужно будет использовать 'intersect' или 2-й или' to одинаковый. –