2013-06-18 2 views
3
SELECT [SomeColumn] 
FROM [Table1] t1 
WHERE Table1ID = (
     SELECT [Table1ID] 
     FROM [Table2] t2 
     WHERE t2.ID = 2 
     OPTION (MAXDOP 4) 
     ) 
OPTION (MAXDOP 4) 

Это дает ошибку Incorrect syntax near the keyword 'OPTION'. на первом OPTION (MAXDOP) Можно ли использовать OPTION (MAXDOP) в подкаталоге запросе? Или окончательный OPTION (MAXDOP) будет достаточно хорош, чтобы установить степень для дополнительного запроса.ОПЦИЯ (MAXDOP) с подзапросом?

+8

Заключительный ВАРИАНТ (MAXDOP) достаточно –

ответ

7

Подзапрос может не быть в куске во время выполнения. Оптимизатор может разделить его и переупорядочить все. Этот запрос, безусловно, не будет выполнен, как написано. Поэтому maxdop для подзапроса не применяется к модели выполнения SQL-серверов.

Для всего запроса может быть только один maxdop. Существует логическая причина этого ограничения.

+0

Правильно, вы должны поставить инструкцию maxdop после «последнего внешнего» запроса – UmbySlipKnot

+0

«Существует логическая причина для этого ограничения», но я не буду говорить вам :-P – Thronk

+1

@Thronk потребовалось 2 года, чтобы кто-то заинтересовался, чтобы спросить :) Причина в том, что оптимизатор может полностью преобразовать запрос в сторону от его письменной формы. Трудно определить подчасти запроса с определенными настройками, учитывая эту общую модель реорганизации. – usr

Смежные вопросы