1

Я прочитал теорию и мнения по сравнению с параметром плана запроса «OPTIMIZE FOR UNKNOWN» SQL Server 2008. Я понимаю, что он делает достаточно хорошо.Опыт работы с OPTIMIZE FOR UNKNOWN

Я сделал несколько ограниченных экспериментов и обнаружил, что с теплым кешем он имел преимущество на> 100 тыс. Строк. Однако это было на простой таблице и запросе без объединений, фильтрации и т. Д. В холодном кэше картина, несомненно, была бы намного больше в его пользу.

В настоящее время у меня нет производственной системы для скамейки до/после. Поэтому мне любопытно, что кто-то сделал до/после тестирования и сделал какие-либо полезные открытия относительно того, когда использовать этот вариант, а когда нет.

ОБНОВЛЕНИЕ:

Я создал таблицу с 3 перевалы, рК на UID, а индекс на Col2 (INT). Вся обработка была против Col2. Отмечено количество строк и времени (DATEDIFF * +1000000):

Type  1,000 5,000 20,000 100,000 
Normal  0.3086 6.327 26.427 144.83, 141.126 
Recompile   117.59 584.837 
For Unknown 0.8101 6.52 26.89 143.788, 143.248 

ответ

0

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

Остальная часть вашего вопроса, похоже, не имеет особого отношения к цели намека или ответственности IMO.

+0

Я мог бы утверждать, что план, сделанный с помощью «@UID = 1», который вызовет сканирование индекса, а не поиск, всегда будет отрицательным для «@UID = 100000». Блоги MSDN очень расплывчаты в отношении любых лучших практик, предоставляя только то, что вы здесь говорите. Остальная часть вопроса освещает сценарий, который усугубляет ситуацию, поэтому ИМО это очень актуально. – IamIC 2010-12-07 12:24:19