¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Otimização de Busca em ABAP: Casos de Uso e Exemplos Práticos

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...
Olá,

Quando você começa a codificar em ABAP, provavelmente não está prestando muita atenção ao tipo de tabela que está usando (STANDARD, SORTED, HASHED) e geralmente se esquece de usar a adição de declaração BINARY SEARCH.

Provavelmente você sabe que o uso desta adição melhora o desempenho, mas quando você está começando pode não estar ciente de quanto isso faz diferença. Ao usar LOOP WHERE, a pesquisa BINARY SEARCH é realizada automaticamente, então para os iniciantes pode se tornar ainda mais complexo entender quando e por que o ABAP está fazendo essa pesquisa de forma otimizada para você.

Eu codifiquei um pequeno exemplo testando 4 casos:

  1. LOOP WHERE em uma TABELA PADRÃO (Ordenada com uma declaração de classificação)

  2. LOOP WHERE em uma TABELA ORDENADA

  3. LEIA A TABELA BINARY SEARCH + LOOP FROM INDEX em uma TABELA PADRÃO (Ordenada com uma declaração de classificação)

  4. LEIA A TABELA BINARY SEARCH + LOOP FROM INDEX em uma TABELA ORDENADA


Eu preparei as variáveis abaixo para o meu programa:
  TYPES: BEGIN OF lt_head,
           docnr TYPE n LENGTH 10,
           gjahr TYPE gjahr,
         END OF lt_head,

         BEGIN OF lt_position,
           docnr TYPE n LENGTH 10,
           gjahr TYPE gjahr,
           posnr TYPE n LENGTH 3,
         END OF lt_position.

  DATA: li_head TYPE STANDARD TABLE OF lt_head
                WITH HEADER LINE,
        li_positions TYPE STANDARD TABLE OF lt_position
                     WITH HEADER LINE,
        li_positions_sorted TYPE SORTED TABLE OF lt_position
                            WITH NON-UNIQUE KEY docnr gjahr posnr
                            WITH HEADER LINE.

LI_HEAD conterá 5000 entradas e cada uma dessas entradas conterá 5 entradas nas tabelas LI_POSITIONS e LI_POSITIONS_SORTED. O programa vai executar apenas os LOOPS, sem código interno, como mostrado abaixo (Você pode ignorar os macros que usei para obter a medição de tempo de execução):
  START_MEASUREMENT 'SORT'.
  SORT li_positions BY docnr gjahr posnr.
  END_MEASUREMENT 'SORT'.

  START_MEASUREMENT 'LOOP WHERE'.
  LOOP AT li_head.
    LOOP AT li_positions WHERE docnr = li_head-docnr
                           AND gjahr = li_head-gjahr.
    ENDLOOP.
  ENDLOOP.
  END_MEAS    
            
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?