Новая подсказка в запросе: 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') )

Published Mon, Aug 14 2006 18:18 by gladchenko
Filed under: