T-SQL: Functions que retornam uma tabela #4

Atualizado: Abr 22

Fala pessoal, no post de hoje eu vou te mostrar como usar uma function que retorne uma tabela e como você pode usar isso para melhorar o desempenho de um select em algumas situações mudando um pouco o conceito de desenvolvimento.


Em alguns casos onde atuei as possibilidades de otimização com índices e estatísticas foram esgotadas, portanto, só me restava mudar a query para tentar mudar também o plano de execução e ter um desempenho melhor.


O conceito da view (que é ser uma tabela virtual onde os "seus dados" são o retorno de um select) é semelhante a uma function (que dentre algumas funcionalidades, pode retornar em formato de tabela porém recebendo parâmetros), por trás dos panos o que é executado no SQL Server pode causar uma diferença no tempo de execução, em alguns cenários (isso vai depender do consumo na instância e como esta o ambiente no geral) o plano de execução usado para retornar os valores de uma view em um JOIN, antes de aplicar o WHERE pode ir para um caminho ruim, principalmente quando estamos falando de milhões e milhões de linhas. A ideia é já trazer o resultado do select (da view que virou function) filtrado por um parâmetro que pode ser dinâmico na aplicação ou até em relatório.


docs.microsoft.com (apesar da ordem lógica é o processador de consulta que define o caminho, portanto, pode ser necessário já retornar os valores filtrados para garantir um melhor desempenho).


Vamos colocar a mão na massa!


Tabelas para exemplo


Número de registros


Criação da function, com parâmetro de data


O Select é realizado na function passando o parâmetro (pode ser uma variável pra deixar mais dinâmico e customizável na aplicação.




Para os casos em que o uso da view "recuperando muitos dados para só então realizar o filtro no select principal" dependendo do plano de execução, você pode usar a function para já retornar os dados com um filtro diminuindo a quantidade de linhas. Nesse exemplo, utilizo a function criada para realizar um JOIN com uma terceira tabela.


Não tem certo e errado, o que temos são alternativas e o DBA precisa conhecê-las para usar em seu dia a dia e orientar quem esta desenvolvendo para melhorar o desempenho do banco de dados.


Não é sempre que a troca será viável, mas essa pode ser uma excelente saída para melhorar o tempo de algumas querys.

Gostou dessa dica? Deixe o seu comentário!


Nos acompanhe em nossas redes sociais!

Grupo VIP Telegram: DBA On boarding

Youtube(vídeos novos todas as quartas): DBA On boarding

Face & Instagram(conteúdo diário): DBA On boarding

Até a próxima, tchau!

30 visualizações0 comentário

Posts recentes

Ver tudo