Некоторое время назад у меня был запрос, который я использовал довольно много для одного из моих пользователей. Он все еще эволюционировал и настраивался, но в итоге он был стабилизирован и работал довольно быстро, поэтому мы создали из него хранимую процедуру.
До сих пор такой нормальный.
Однако хранимая процедура была медленной. Нет существенной разницы между запросом и proc, но изменение скорости было массивным.
[Фон, мы запускаем SQL Server 2005.]
Дружественный локальный администратор баз данных (который больше не работает здесь) рассмотрел хранимую процедуру и сказал, что "спуфинг параметров!" ( Изменить:, хотя кажется, что он, возможно, также известен как "обнюхивание параметров", что может объяснить нехватку хитов Google, когда я пытался его найти.)
Мы отвлекли часть хранимой процедуры ко второму, завернули вызов этого нового внутреннего proc в ранее существовавший внешний, называемый внешним, и, hey presto, он был так же быстро, как исходный запрос.
Итак, что дает? Может ли кто-то объяснить параметризацию спуфинга?
Бонусный кредит для
- подчеркивание того, как его избежать
- предлагая, как распознать возможную причину.
- обсуждать альтернативные стратегии, например. статистика, индексы, ключи, для смягчения ситуации.