Защото, когато използвате ФИКСИРАНИ стойности с изключена АВТОМАТИЧНА ПАРАМЕТРИЗАЦИЯ, тогава планът на заявката знае ТОЧНО за каква стойност трябва да изпълни заявката. Така че планът е настроен СПЕЦИАЛНО към тези стойности.
Въпреки това, когато използвате променливи, планът, който ще бъде поставен в кеша на заявките, е този, който съдържа параметризираните променливи - които могат да бъдат заменени от всяка променлива и ще използват повторно същия план. Следователно тези планове ще трябва да бъдат по-стабилни и общи, за да се справят с „най-добрия среден случай“.
В SQL Server 2008 можете да зададете дали простите параметри да се параметризират автоматично, така че да получавате последователно плана за „най-добър среден случай“ – с всичките му добри и лоши страни.
Справка:
РЕДАКТИРАНЕ - върху производителността
Що се отнася до производителността, оптимизаторът може да се обърка - в този случай той погледна статистиката for the exact values
и сметна, че индексът не е полезен (може да е проблем с повратна точка), така че вместо това планът е за клъстерно сканиране. Изящно изкуство е дали да наложите план за заявка - но очевидно използването на индекс е 50% по-бързо за
- конкретен хардуер
- разпределение на данните за определен момент
- дадени са конкретни стойности
Освен ако нямах много добра причина, не бих играл с оптимизатора на заявки (напр. използвайки подсказки за индекс), освен ако нямам много данни, за да докажа, че неизменно ще го направи по-бърз.