SQL Optimization
Olá, ao longo da minha jornada profissional, fui participando de alguns projetos. E nesses projetos consegui me identificar muito na parte de banco de dados, em PL/SQL e otimizações de consultas.
E um desses projetos que gostaria de compartilhar hoje é de otimização de uma view. Foi em ambiente oracle e sobre o sistema MV.
A query veio para mim com um tempo de 10min e 40seg. Sim, é uma query que busca de várias tabelas e até sobre algumas tabelas com uma má performace. Mas, aceitei o desafio da tentativa de otimização.
Fiz vários testes, criando índices, peguei algumas subquerys e coloquei em views, outras em uma function, aumentei as condições no where, mas adiantava pouco.
E até que diante de uma conversa com o cliente, que explicava sobre a ideia de algumas colunas, me deixou com uma pulga atrás da orelhavem uma coluna específica.
Analisei mais, e resolvi tirar a "tal" da coluna para verificar (que era uma baita de uma subquery), e o tempo diminui absurdamente, acredite, de 10min sem essa coluna foi para 30seg, inacreditável.
Então comecei a focar na melhoria dessa coluna.
Bom, até que depois de várias tentativas, apareceu o resultado kkk
Mostro o resultado na imagem abaixo haha
Mas, em resumo, foi alguns faotores. Na subquery tinha vários Cases, então arrumei mais e fazendo alguns testes, tinha cases que nunca entravam, então retirei, enfim, dei uma organizada nisso. Depois vi que a subquery chamava várias vezes uma function para o mesmo resultado, ao analisar mais afundo, vi que cada chamada na function subscrevia o resultado, e assim foi, retirei algumas chamadas e fui executando a view para ver os impactos.
Após concluir essa parte, não me contentando com o resultado, fui fazendo mais testes e até que um dos testes foi aceitável kk criei uma function apenas para pegar esse resultado da subquery.
Mas, é isso, compartilhando um dos projetos que participei. Fico feliz em poder ajudar nisso e ter um resultado de SQL rápido e também bem documentada para o próximo desenvolvedor.