Voeg in uw zoekopdrachten OPTION(OPTIMIZE FOR UNKNOWN)
. toe (als de laatste clausule) om het snuiven van parameters te voorkomen. Zie voor syntaxis en uitleg de documentatie op Query Hints
.
Wat SQL Server doet de eerste keer dat het een Stored Procedure uitvoert, is het optimaliseren van het (de) uitvoeringsplan(nen) voor de parameters die eraan zijn doorgegeven. Dit wordt gedaan in een proces dat Parameter Sniffing
wordt genoemd .
Over het algemeen worden uitvoeringsplannen door SQL Server in de cache opgeslagen, zodat SQL Server niet elke keer voor dezelfde query opnieuw hoeft te compileren. De volgende keer dat de procedure wordt uitgevoerd, zal SQL Server het (de) uitvoeringsplan(nen) hergebruiken voor de query's erin... De uitvoeringsplan(nen) kunnen echter totaal inefficiënt zijn als u het (ze) met andere parameters aanroept .
De optie die ik je gaf, zal de SQL-compiler vertellen dat het uitvoeringsplan niet moet worden geoptimaliseerd voor specifiek parameters, maar eerder voor elke parameter die wordt doorgegeven aan de opgeslagen procedure.
Om de documentatie te citeren:
In sommige gevallen kunnen Opgeslagen procedures baat hebben bij Parameter Sniffing, in sommige gevallen niet. Voor de opgeslagen procedures die niet profiteren van Paramater Sniffing, kunt u de optie toevoegen aan elke query die een van de parameters van de opgeslagen procedure gebruikt.