Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!
Fala pessoal belezura? Hoje quero mostrar para vocês como fiz para realizar um tuning mágico em um cliente aqui da consultoria, espero que gostem.
Vou mostrar a query original para vocês, claro com dados fakes e nome fake da tabela.
Essa query gera o seguinte plano:
Eu peguei a query pelo plano, então quando vi o plano já sabia que era um union com acesso a tabela 3 x, a partir desse momento fui tentar entender o que o dev queria fazer com isso.
Vou quebrar as 3 queries do union para entendemos juntos:
Nessa primeira query ele queria simplesmente verificar quantas linhas tinham na tabela com o filtro de da data "maior", pegando também a maior data de carga, o resto ele coloca como 0 para que ele some tudo na CTE e fique com uma linha só.
Depois ele faz a mesma lógica para pegar as linhas que são maiores que 7 dias, considerando a data de hoje:
Por último ele faz isso para a tabela
Depois ele junta tudo isso em uma agregação na sub query:
Legal, agora que entendemos o que ele quer, o que eu de cara pensei ai ao ver essa query "Será que posso acessar essa tabela 1 ou no máximo 2 vezes?"
E pensei "Ora o filtro número 2 não satisfaz essas duas condições?" Sim, satisfaz, pq no primeiro filtro ele queria pegar tudo que for maior que a data que hoje e no segundo ele quer pegar tudo que for maior que os últimos 7 dias, sendo assim, também pegaria o dia de amanha, MASSSSS ainda tinha um problema para resolver, como iria separar esse count() ? Dai me lembrei de uma dica que o Marcio da Dataside me deu e pensei, acho que posso usar aqui :)
Esse merecia virar uma aula kkk!
ResponderExcluir