Вы не решаете, что распараллеливать - оптимизатор SQL Server делает. И самая большая единица работы, с которой оптимизатор будет работать, - это один оператор, поэтому вы найдете способ выразить свой запрос как один оператор , а затем положитесь на SQL Server, чтобы выполнить свою работу, что обычно это будет хорошо.
Если, построив ваш запрос, производительность не приемлема, вы можете посмотреть на применение подсказок или навязывание определенных планов. Многие люди разбивают свои запросы на несколько операторов, либо полагая, что они могут выполнять работу лучше, чем SQL Server, либо потому, что они «естественно» думают о поставленной задаче. Оба являются «неправильными» (для определенных значений неправильными), но если есть естественная разбивка, вы можете скопировать ее с помощью выражений Common Table - это позволит вам назвать каждую часть проблемы, а затем объединить их вместе, все как часть одного заявления.
например:.
;WITH TabA AS (
SELECT ID FROM Table1 WHERE Name = 'A'
), TabB AS (
SELECT ID FROM Table2 WHERE Name = 'B'
)
SELECT ID FROM TabA UNION ALL SELECT ID FROM TabB
И это позволит серверу решить, как наилучшим образом разрешить этот запрос (например, решить, сохранять ли промежуточные результаты в «временных» таблицах)
Видя в одном из ваших других комментариев, что вы обсуждали необходимость «работать с» промежуточными результатами - это все еще можно сделать с помощью CTE (если это не просто случай, когда вы не в состоянии выразить «конечный» результат) как один запрос), например:
;WITH TabA AS (
SELECT ID FROM Table1 WHERE Name = 'A'
), TabAWithCalcs AS (
SELECT ID,(ID*5+6) as ModID from TabA
)
SELECT * FROM TabAWithCalcs