Eu tenho um banco de dados onde estou usando TVFs embutidos (funções de valor de tabela) em vez de exibições. Por exemplo, posso ter duas tabelas chamadas [modelo do carro] e [fabricante do carro] que estou unindo dentro do TVF [fnCarBrands].
Esses TVFs são então chamados por outros TVFs para fazer processamento e relatórios adicionais. Então, eu poderia pegar minha função [fnCarBrands] e juntar à tabela [Purchase Year] para formar uma função [fnCarBrandHistory]. E assim por diante para várias camadas de TVFs.
Eu provavelmente poderia obter a mesma funcionalidade usando visualizações, já que meus TVFs embutidos são realmente apenas junções de tabelas e outros TVFs.
Como o desempenho de TVFs embutidos escritos dessa maneira se compara com as visualizações?
O otimizador de consulta trata uma função com valor de tabela inline exatamente como uma visualização:
Uma função com valor de tabela de várias instruções é executada mais como um procedimento armazenado. Eles normalmente precisam ser executados várias vezes, em vez de serem agrupados na consulta principal:
Você precisará criar exibições semelhantes para as funções e consultar cada uma observando o plano de execução para ver o que está acontecendo com cada uma.
É claro que criar exibições que chamam outras exibições também é um assassino de desempenho. Não vá por esse caminho. Escreva as consultas necessárias e não use TVFs ou exibições se desejar desempenho. É a camada que está criando o problema, isso é quase sempre uma coisa ruim de se fazer ao consultar um banco de dados e você pode acabar rapidamente atingindo o limite do número de tabelas que pode referenciar também, especialmente porque muitas vezes você acaba referenciando o mesmas tabelas em camadas diferentes. Além disso, embora isso pareça ser mais fácil de manter, não é. Tente depurar ou adicionar uma coluna devido a um novo requisito quando a camada que você precisa corrigir estiver na parte inferior.