Некоторое время назад у меня был запрос, который я довольно много использовал для одного из моих пользователей. Он все еще эволюционировал и настраивался, но в итоге он был стабилизирован и работал довольно быстро, поэтому мы создали из него хранимую процедуру.Параметр Sniffing (или Spoofing) в SQL Server
До сих пор такой нормальный.
Сохраненная процедура, однако, была медленной. Нет существенной разницы между запросом и proc, но изменение скорости было массивным.
[Background, мы бежим SQL Server 2005.]
Дружественный местный DBA (который больше не работает здесь) взглянул на хранимые процедуры и сказал «параметр подмену!» (Edit: хотя, кажется, что это, возможно, также известный как «параметр нюхают», которая могла бы объяснить малочисленность Google хитов, когда я пытался искать его.)
Мы отведенной некоторые из хранимой процедуры к второй, завернул вызов этого нового внутреннего proc в ранее существовавший внешний, называемый внешним, и, hey presto, он был так же быстро, как исходный запрос.
Итак, что дает? Может ли кто-то объяснить параметризацию спуфинга?
Bonus кредит на
- подсветка, как избежать этого
- указывает, как распознать ВОЗМОЖНАЯ ПРИЧИНА
- обсудить альтернативные стратегии, например, статистика, индексы, ключи, для смягчения ситуации
Это не просто возможность, это определенность - нет такой вещи, как подделка параметров. Это параметр sniffing. – ErikE