Em suas consultas, adicione
OPTION(OPTIMIZE FOR UNKNOWN)
(como a última cláusula) para evitar a detecção de parâmetros. Para sintaxe e explicação, consulte a documentação em Dicas de consulta
. O que o SQL Server faz na primeira vez que executa um Stored Procedure é otimizar o(s) plano(s) de execução para os parâmetros que foram passados para ele. Isso é feito em um processo chamado
Parameter Sniffing
. Em geral, os planos de execução são armazenados em cache pelo SQL Server para que o SQL Server não precise recompilar todas as vezes para a mesma consulta. Na próxima vez que o procedimento for executado, o SQL Server irá reutilizar o(s) plano(s) de execução para as consultas nele... .
A opção que dei a você informará ao compilador SQL que o plano de execução não deve ser otimizado para específicos parâmetros, mas sim para qualquer parâmetro que é passado para o procedimento armazenado.
Para citar a documentação:
Em alguns casos, Stored Procedures podem se beneficiar do Parameter Sniffing, em alguns casos não. Para os procedimentos armazenados que não se beneficiam da detecção de parâmetros, você pode adicionar a opção a cada consulta que usa qualquer um dos parâmetros do procedimento armazenado.