Dans vos requêtes, ajoutez OPTION(OPTIMIZE FOR UNKNOWN)
(comme la dernière clause) pour empêcher le reniflage de paramètres. Pour la syntaxe et l'explication, consultez la documentation sur Query Hints
.
Ce que fait SQL Server la première fois qu'il exécute une procédure stockée, c'est optimiser le ou les plans d'exécution pour les paramètres qui lui ont été transmis. Cela se fait dans un processus appelé Parameter Sniffing
.
En général, les plans d'exécution sont mis en cache par SQL Server afin que SQL Server n'ait pas à recompiler à chaque fois pour la même requête. La prochaine fois que la procédure sera exécutée, SQL Server réutilisera le ou les plans d'exécution pour les requêtes qu'il contient... Cependant, le ou les plans d'exécution pourraient être totalement inefficaces si vous les appelez avec des paramètres différents .
L'option que je vous ai donnée indiquera au compilateur SQL que le plan d'exécution ne doit pas être optimisé pour spécifique paramètres, mais plutôt pour tous paramètre passé à la procédure stockée.
Pour citer la documentation :
Dans certains cas, les procédures stockées peuvent bénéficier du reniflage de paramètres, dans certains cas non. Pour les procédures stockées qui ne bénéficient pas de Paramater Sniffing, vous pouvez ajouter l'option à chaque requête qui utilise l'un des paramètres de la procédure stockée.