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

O uso de uma função para simplificar a consulta SQL afetará massivamente o desempenho?


Normalmente, selecionando o resultado de uma função escalar não vai doer muito, mas filtrar por isso pode facilmente custar centenas de segundos (não necessariamente).

Se você precisar filtrar por um resultado de função escalar (WHERE col = dbo.scalar_function() ), geralmente ajuda a criar uma função com valor de tabela embutida. Ele retornaria seu valor como a única linha da tabela de resultados. Você então faria inner join com o resultado da função, filtrando efetivamente pelo valor retornado. Isso funciona porque o SQL Server sempre é capaz de desenrolar funções com valor de tabela embutidas e embuti-las na consulta de chamada.

Observe que esse truque não funcionará se a função for de várias etapas. Estes não podem ser desenrolados.