Ponieważ gdy używasz wartości FIXED z wyłączoną funkcją AUTO-PARAMETERIZATION, plan zapytania dokładnie wie, dla jakiej wartości jest potrzebne do uruchomienia zapytania. Tak więc plan jest dostrojony SPECYFICZNIE do tych wartości.
Jednak gdy używasz zmiennych, plan, który zostanie umieszczony w pamięci podręcznej zapytań, to ten, który zawiera sparametryzowane zmienne - które można zastąpić dowolną zmienną i ponownie użyje tego samego planu. Dlatego plany te będą musiały być bardziej solidne i ogólne, aby poradzić sobie z „najlepszym przeciętnym przypadkiem”.
W SQL Server 2008 możesz ustawić, czy proste parametry mają być automatycznie parametryzowane, aby uzyskać konsekwentnie „najlepszy średni przypadek” – ze wszystkimi jego dobrymi i złymi.
Nr ref.:
EDYTUJ — o wydajności
Jeśli chodzi o wydajność, optymalizator może się pomylić - w tym przypadku spojrzał na statystyki for the exact values
i czuł, że indeks nie jest pomocny (może być problemem w punkcie krytycznym), więc zamiast tego plan dotyczy skanowania klastrowego. To sztuka, czy wymusić plan zapytania - ale oczywiście użycie indeksu jest o 50% szybsze w przypadku
- specyficzny sprzęt
- dystrybucja danych w określonym punkcie czasu
- podano określone wartości
O ile nie miałbym bardzo dobrego powodu, nie grałbym w Optymalizatora zapytań (np. za pomocą wskazówek dotyczących indeksu), chyba że mam dużo danych, aby udowodnić, że niezmiennie to przyspieszy.