К вашему сведению - вам нужно знать что-то еще, когда вы работаете с SQL 2005 и храните процы с параметрами.
SQL Server скомпилирует план выполнения хранимой процедуры с первым используемым параметром. Так что, если вы запустите это:
usp_QueryMyDataByState 'Rhode Island'
План выполнения будет лучше всего работать с данными небольшого штата. Но если кто-то оборачивается и бежит:
usp_QueryMyDataByState 'Texas'
План выполнения, разработанный для данных размером с Род-Айленд, может быть не таким эффективным с данными размером с Техас. Это может привести к неожиданным результатам при перезапуске сервера, поскольку вновь созданный план выполнения будет нацелен на любой параметр, который используется первым - не обязательно лучший. План не будет перекомпилирован, пока не будет серьезной причины для этого, например, если статистика будет перестроена.
Именно здесь появляются планы запросов, и SQL Server 2008 предлагает множество новых функций, которые помогают администраторам баз данных устанавливать долгосрочные планы конкретных запросов независимо от того, какие параметры сначала вызываются.
Меня беспокоит то, что когда вы перестраивали свой сохраненный процесс, вы заставляли план выполнения перекомпилироваться. Вы назвали его своим любимым параметром, и затем, конечно, это было быстро - но проблема, возможно, не была в сохраненном процессе. Возможно, в какой-то момент сохраненный процесс был перекомпилирован с необычным набором параметров и, следовательно, с неэффективным планом запроса. Возможно, вы ничего не исправили, и вы можете столкнуться с той же проблемой при следующем перезапуске сервера или перекомпиляции плана запроса.