Можно ли ОПТИМИЗИРОВАТЬ ДЛЯ конкретной табличной переменной 'значение'? - PullRequest
0 голосов
/ 27 мая 2019

Предположим, у меня запущен следующий запрос на SQL Server 2016:

declare @Ids as table
(
    Id int
)

-- Insert some values into @Ids table

select
    *
from dbo.Foos
where FooId in (select Id from @Ids)

Теперь давайте предположим, что я хочу OPTIMIZE FOR конкретное «значение» таблицы @Ids.Можно ли вообще дать такую ​​подсказку?Я пробовал option (optimize for (@Ids = (values(1), (2)))), но не компилируется

Заранее спасибо

1 Ответ

1 голос
/ 27 мая 2019

Нет, вы не можете использовать эту опцию таким способом.Давайте посмотрим на документацию:

ОПТИМИЗИРОВАТЬ ДЛЯ ( @ variable_name {UNKNOWN | = literal_constant } [, ... n]) Инструктируетоптимизатор запросов для использования определенного значения для a локальной переменной , когда запрос компилируется и оптимизируется.Это значение используется только во время оптимизации запроса, а не во время его выполнения.

@ variable_name Имя локальной переменной , используемой в запросе, для которойзначение может быть назначено для использования с подсказкой запроса OPTIMIZE FOR.

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

Подсказки (Transact-SQL) - Запрос

...