FYI - musisz być świadomy czegoś innego podczas pracy z SQL 2005 i przechowywanymi procesami z parametrami.
SQL Server skompiluje plan wykonania przechowywanej procedury z pierwszym użytym parametrem. Więc jeśli uruchomisz to:
usp_QueryMyDataByState 'Rhode Island'
Plan wykonania będzie działał najlepiej z danymi małego stanu. Ale jeśli ktoś się odwróci i ucieknie:
usp_QueryMyDataByState 'Texas'
Plan wykonania zaprojektowany dla danych o rozmiarze Rhode-Island może nie być tak wydajny w przypadku danych o rozmiarze Teksas. Może to dać zaskakujące wyniki po ponownym uruchomieniu serwera, ponieważ nowo wygenerowany plan wykonania będzie ukierunkowany na dowolny parametr użyty jako pierwszy - niekoniecznie najlepszy. Plan nie zostanie ponownie skompilowany, dopóki nie będzie ku temu ważnego powodu, na przykład jeśli statystyki zostaną odbudowane.
W tym miejscu wkraczają plany zapytań, a SQL Server 2008 oferuje wiele nowych funkcji, które pomagają administratorom baz danych przypiąć konkretny plan zapytań na dłuższą metę, bez względu na to, jakie parametry zostaną wywołane jako pierwsze.
Martwię się, że kiedy przebudowałeś swój przechowywany proc, wymusiłeś ponowną kompilację planu wykonania. Wywołałeś go swoim ulubionym parametrem, a potem oczywiście był szybki - ale problemem mógł nie być przechowywany proc. Mogło być tak, że przechowywany proces został w pewnym momencie ponownie skompilowany z nietypowym zestawem parametrów, a tym samym z niewydajnym planem zapytań. Być może niczego nie naprawiłeś i możesz napotkać ten sam problem przy następnym ponownym uruchomieniu serwera lub ponownej kompilacji planu zapytań.