Новая подсказка в запросе: OPTIMIZE FOR
В SQL Server 2005 появилась новая фича, которая позволяет немножко уменьшить "головную боль" от того, что оптимизатор запросов автоматически использует значения параметра, переданного в хранимую процедуру для определения плана исполнения запроса. Детали проблемы хорошо изложены тут: Методика, которая гарантирует в SQL Server 2000 выбор определенного плана исполнения запроса.
Только что наткнулся в BOL на новый и достаточно интересных хинт запроса, далее просто цитирую BOL (не взирая на все неточности и "ляпы" перевода)…
OPTIMIZE FOR - Подсказывает оптимизатору запросов, что возможно использовать частичное значение для локальных переменных, если запрос скомпилирован и оптимизирован. Значение используется только в процессе оптимизации запроса, но не в процессе выполнения. Подсказка OPTIMIZE FOR может быть использована для отмены определений параметров оптимизатором или при создании руководства плана. Дополнительные сведения см. в разделах Перекомпиляция хранимых процедур и Оптимизация запросов в используемых приложениях с помощью руководств планов.
Использование подсказки OPTIMIZE FOR
В следующем пример оптимизатору запросов дается распоряжение использовать значение 'Seattle' для локальной переменной @city_name при оптимизации запроса.
DECLARE @city_name nvarchar(30)
SET @city_name = 'Ascheim'
SELECT * FROM Person.Address
WHERE City = @city_name
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle') )
|