Eu tenho um banco de dados onde estou usando TVFs embutidos (funções de valor de tabela) em vez de visualizações. Por exemplo, eu posso ter duas tabelas chamadas [modelo de carro] e [fabricante de carro] que estou juntando dentro do TVF [fnCarBrands].
Esses TVFs são chamados por outros TVFs para processar e gerar relatórios adicionais. Portanto, posso pegar minha função [fnCarBrands] e me juntar à tabela [Ano da compra] para formar uma função [fnCarBrandHistory]. E assim por diante para várias camadas de TVFs.
Provavelmente eu poderia obter a mesma funcionalidade usando visualizações, pois meus TVFs embutidos são na verdade apenas junções de tabelas e outros TVFs.
Como o desempenho dos TVFs incorporados dessa maneira se compara às visualizações?
fonte
Respostas:
O otimizador de consultas trata uma função com valor de tabela embutida exatamente como uma exibição:
Uma função com valor de tabela com várias instruções é executada mais como um procedimento armazenado. Eles geralmente precisam ser executados várias vezes, em vez de serem dobrados na consulta principal:
fonte
Você precisará criar visualizações semelhantes às funções e consultar cada uma olhando o plano de execução para ver o que está acontecendo com cada uma.
fonte
É claro que criar visões que chamam outras visões também é prejudicial ao desempenho. Não siga por esse caminho. Escreva as consultas necessárias e não use TVFs ou exibições se desejar desempenho. São as camadas que estão criando o problema, isso quase sempre é uma coisa ruim a se fazer ao consultar um banco de dados e você pode acabar rapidamente atingindo o limite do número de tabelas às quais pode se referir também, especialmente porque muitas vezes acaba fazendo referência ao mesmas tabelas em diferentes camadas. Além disso, embora isso pareça 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.
fonte