Поскольку при использовании значений FIXED с отключенной функцией AUTO-PARAMETERIZATION план запроса точно знает, для какого значения ему нужно выполнить запрос.Таким образом, план настраивается ОСОБЕННО на эти значения.
Однако, когда вы используете переменные, план, который будет помещен в кэш запросов, будет содержать параметризованные переменные, которые можно заменить любой переменной и перезапуститьиспользовать тот же план.Поэтому эти планы должны быть более надежными и общими для обработки «наилучшего среднего случая».
В SQL Server 2008 вы можете указать, будут ли автоматически параметрироваться простые параметры, чтобы вы последовательно получали «лучший средний случай»"План - со всеми его хорошими и плохими.
Ссылка:
EDIT - по производительности
Что касается производительности, оптимизатор может ошибиться - в этом случае он посмотрел статистику for the exact values
и почувствовал, что индексбесполезен (может быть, это переломный момент), поэтому план предназначен для кластерного сканирования.Это тонкое искусство в отношении того, следует ли форсировать план запроса, но ясно, что использование индекса на 50% быстрее для
- конкретного оборудования
- определенного момента времени распределения данных
- заданные конкретные значения
Если бы у меня не было очень очень веской причины, я бы не стал играть в Оптимизатор запросов (например, используя подсказки индекса), если у меня нет большого количества данных, чтобы доказать, что это неизменно сделает егобыстрее.