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

Função com valor de tabela matando o desempenho da minha consulta


Retornar uma variável de tabela a tornará uma função com valor de tabela de várias instruções e pode ser ruim para o desempenho devido ao fato de ser tratado como uma tabela, exceto que não há estatísticas disponíveis para o SQL Server basear um bom plano de execução - portanto, estimará a função como retornando um número muito pequeno de linhas. Se ele retornar um número maior de linhas, o plano gerado poderá ser muito inferior ao ideal.

Considerando que, retornar apenas um SELECT o torna uma função com valor de tabela inline - pense nisso mais como uma visão. Nesse caso, as tabelas subjacentes reais são trazidas para a consulta principal e um plano de execução melhor pode ser gerado com base nas estatísticas adequadas. Você notará que, neste caso, o plano de execução NÃO fará menção à função, pois basicamente apenas mescla a função na consulta principal.

Há uma ótima referência sobre isso em MSDN por CSS SQL Server Engineers incluindo (citação):