По умолчанию компилятор SQL использует значения любых параметров, заданных при первом выполнении SP, чтобы помочь оптимизировать план (см. Параграфы 2 и 3 в этой статье MSDN о перекомпиляции SP ).Затем этот план кэшируется для повторного использования до тех пор, пока он не выйдет из кэша - много подробностей о процессе кэширования плана здесь .
В блоге MSDN, который вы цитируете, отмечаются способы облегчения этого процесса.для компилятора;Я думаю, что пункт 4 (цитируемый в вопросе) предполагает, что это преимущество хранимых процедур перед специальным SQL.
Подсказка OPTIMIZE FOR UNKNOWN
указывает компилятору избегать поведения по умолчанию;что он должен игнорировать значения параметров, указанные при первом выполнении, и выбрать более обобщенный план.Это более экстремальная версия пункта 2 в списке предложений в конце сообщения блога, цитируемого в вопросе;
2 Если вы обнаружите, что оптимизатор выбирает разные планы с течением времени, которые имеютизменяющиеся характеристики производительности, рассмотрите возможность использования подсказки параметра с репрезентативным «средним» значением, чтобы получить хороший общий план запросов, который будет работать разумно для всех значений.
, но не выбирайте среднее или репрезентативное значениекомпилятор будет эффективно полностью игнорировать значения параметров.
Подумайте об использовании OPTIMIZE FOR UNKNOWN
в обстоятельствах, указанных в пункте 2, - когда один и тот же запрос дает очень переменную производительность, потому что план в некоторых обстоятельствах плохой - обычно, когдапараметры в столбцах фильтра запросов очень переменной мощности.