Във вашите заявки добавете OPTION(OPTIMIZE FOR UNKNOWN)
(като последната клауза), за да се предотврати надушването на параметър. За синтаксис и обяснение вижте документацията за Query Hints
.
Това, което SQL Server прави за първи път, когато стартира съхранена процедура, е да оптимизира плана(овете) за изпълнение за параметрите, които са му предадени. Това се прави в процес, който се нарича Parameter Sniffing
.
По принцип плановете за изпълнение се кешират от SQL Server, така че SQL Server не трябва да компилира отново всеки път за една и съща заявка. Следващият път, когато процедурата се изпълни, SQL Server ще използва повторно плана(ите) за изпълнение за заявките в него... Планът(ите) за изпълнение обаче може да е напълно неефективен, ако го (ги) извикате с различни параметри .
Опцията, която ви дадох, ще каже на SQL компилатора, че планът за изпълнение не трябва да бъде оптимизиран за специфични параметри, а по-скоро за всеки параметър, който се предава на съхранената процедура.
За да цитирате документацията:
В някои случаи съхранените процедури могат да се възползват от надушването на параметри, в някои случаи не. За съхранените процедури, които не се възползват от параметър нахващане, можете да добавите опцията към всяка заявка, която използва някой от параметрите на съхранената процедура.