Будет ли опция OPTIMIZE работать в табличной функции с несколькими операторами? - PullRequest
1 голос
/ 24 ноября 2010

У меня SQL Server 2008 Express, поэтому у меня нет всех инструментов, чтобы увидеть, что происходит под капотом. Кто-то предложил мне, так как табличная функция с множеством операторов является «черным ящиком», SQL Server может игнорировать следующее:

OPTION  (OPTIMIZE FOR (@JobID UNKNOWN, @Status UNKNOWN, @ResellerID UNKNOWN))

У кого-нибудь есть доказательства этого в любом случае?

Я знаю, что если бы я использовал хранимую процедуру, это не было бы проблемой. Тем не менее, использование табличной функции с множеством операторов предлагает много удобств для того, что мне нужно сделать.

1 Ответ

1 голос
/ 24 ноября 2010

В Express у вас есть та же информация, что и в любой другой версии, просто у вас нет инструментов с графическим интерфейсом, чтобы mangle отображал ее.Например, планы выполнения по-прежнему доступны в DMV, например sys.dm_exec_query_plan.

Я не уверен, какой вопрос вы задаете, но верно, что встроенные табличные функции - намного лучший выбор, чем табличные функции с несколькими операторами.Оптимизатор может видеть, что делает TVF, и может должным образом оптимизировать его в контексте всего запроса, возможно, исключая ненужные вызовы функции или выбирая путь доступа (индекс), который помогает сократить общее совокупное время всего запроса.С TVF с несколькими утверждениями план вынужден эффективно вызывать и оценивать функцию каждый раз (т.е. для каждой строки-кандидата) и видеть, каков результат.Это то, что, вероятно, имеет в виду ваш друг, когда говорит, что TVF с несколькими утверждениями - это «черный ящик».

...