Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O TSQL retornará resultados mais rápidos do que o procedimento armazenado no SQL Server


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.