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

Alternativa ao uso de variáveis ​​locais em uma cláusula where


Usando variáveis ​​locais no filtro WHERE causa FULL TABLE SCAN. Porque o SS não conhece os valores das variáveis ​​locais em tempo de compilação. Então cria um plano de execução para a maior escala que pode estar disponível para a coluna.

Para evitar o problema de desempenho, o SS deve conhecer os valores das variáveis ​​em tempo de compilação. Definindo um SP e passando essas variáveis ​​locais como um parâmetro é uma das soluções do problema. Outra solução é usar sp_executesql e passando essas variáveis ​​locais como parâmetro novamente...

Ou você pode adicionar OPÇÃO ( RECOMPILAR ) no final de sua instrução sql para compilar suas variáveis ​​locais. Isso resolverá o problema dos performans.