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!
Comments