SELECT com mais olhos que barriga
Embora seja evidente que, ao fazer selecções de dados de uma tabela da base de dados, devemos ter o cuidado de escolher apenas os campos que necessitamos, a verdade é que há muito boa gente que não se dá a esse trabalho e manda vir tudo.
Mediremos aqui a diferença real entre as duas abordagens.
A transacção SE38 tem um ecrã onde podemos fazer experiências correndo pequenos pedações de código ABAP. A miserável tradução em português chama-lhe “Dicas e sugestões para performance de ABAP Objects” e pode ser acedido a partir do menu SE38 -> Ambiente -> Exemplos -> Exemplos de performance.
Lá encontram duas janelitas que permitem correr dois programas lado a lado. Experimente-se correr os seguintes códigos:
Muitos registos
Neste primeiro exemplo todos os campos da tabela KNA1 são carregados para a tabela interna:
data: tab type standard table of kna1.
select * from kna1 into table tab.
Já no segundo exemplo, carrega-se apenas o campo KUNNR:
data: tab type standard table of kunnr.
select kunnr from kna1 into table tab.
E os resultados são: - todos os campos: 1053 microsegundos - só o KUNNR: 17 microsegundos
Ou seja, pedir todos os campos da tabela demorou 60 vezes mais do que pedir apenas o KUNNR.
Um único registo
Se no caso de selecções de vários registos ainda vai sendo comum ter-se o cuidado de fazer esta filtragem, já no caso da selecção de apenas um registo o mundo ABAP está atafulhado de SELECT SINGLE *. Veja-se então o que acontece na escolha de apenas um registo:
Neste exemplo carregam-se todos os campos do primeiro registo da KNA1:
DATA: dat TYPE kna1.
SELECT SINGLE * INTO dat FROM kna1 WHERE kunnr = '0000000001'.
Já aqui só se carrega o campo KUNNR do primeiro registo da KNA1:
DATA: dat TYPE kunnr.
SELECT SINGLE kunnr INTO dat FROM kna1 WHERE kunnr = '0000000001'.
E os resultados são: - todos os campos: 390 microsegundos - só o KUNNR: 209 microsegundos
Valente diferença, não? Ler apenas um campo é 2x mais rápido do que ler todos.
Vá, vamos lá a deixar de ser preguiçosos. Nada de mandar vir tudo para depois não usar. Toca a escolher só o que interessa.
O Abapinho saúda-vos.