Essa semana vamos falar de um assunto muito legal, que apesar de ser algo trivial para consultores mais experientes, pode ser uma dor de cabeça para profissionais que estão começando: performanc em loope.
Quando falamos em performance existem vários pontos que podem ser observados, desde variáveis que são usadas sem necessidade, passando por select’s planejados e escritos de qualquer forma (ex.: for all entries in em tabela vazia), falta de conhecimento em algumas técnicas que a linguagem nos oferece, até chegar nas estruturas de repetição (LOOP, DO, WHILE).
Considere, para fins didáticos, que para um dado problema nós tivemos que fazer o select abaixo (longe de ser um select planejado):
Full Table Scan
A primeira citaremos apenas para ter um universo maior de comparação, apesar de que hoje em dia ninguém faça esse tipo de procedimento.
Loop… Where
O código abaixo, e o mais utilizado, tem um ganho de performance absurdo se comparado com o exemplo acima. Mas isso não se deve apenas à presença da cláusula WHERE no loop, note que estamos utilizando a chave da tabela BSEG.
Parallel Cursor
Dentre muitas variações permitidas com os códigos apresentados, o que melhor se comporta para esse tipo de situação em que nos encontramos é o loop indexado, ou Parallel Cursor como é conhecido tecnicamente. Para utilizar essa técnica, vamos ordenar nossas tabelas por suas respectivas chaves de busca e depois descobrimos a partir de qual index está as informações que procuramos, veja abaixo:
Como você pode ver abaixo, o ganho com essa técnica é muito grande, pois o processamento diminui de forma drástica uma vez que temos os dados ordenados e o acesso foi limitado apenas a faixa que há interesse.
Para quem não sabe, o gráfico gerado para analisar a performance foi feito usando a transação SE30.
Compartilhe essa publicação com seus amigos, comente e siga a página da Bertholdo nas redes sociais.
Colaboradores: Alexandre Henrique – Desenvolvimento Abab Lucas V. Salomão – Desenvolvimento Abap