Performanceanalyse Loop itab where .. from i to j

Aus SAP-Wiki
(Weitergeleitet von Loop itab where .. from i to j)
Zur Navigation springenZur Suche springen

Bei einem Loop über eine interne Tabelle sollte die Where-Bedingung genutzt werden, anstatt im Rumpf der Loop-Schleife eine Check oder If- Bedingung zu implementieren. Es findet weniger Datentransport statt, das Coding ist kürzer und es ist performanter.

Nach Möglichkeit sollte auch der Tabellebereich "from i to j" genutzt werden, wenn man weiß in welchem Bereich der Tabelle das Ergebnis zu finden ist.

Beispiel mit einer STANDARD TABLE (Mit einer SORTED TABLE ist der Zusatz FROM/ TO kaum notwendig):

Coding

REPORT.

*** Auswahl LOOP-Variante
PARAMETER p TYPE c LENGTH 1 DEFAULT '1'.

TYPES: BEGIN OF ty_struc,
         index TYPE i,
         field TYPE c LENGTH 10,
       END OF ty_struc.

DATA ls_struc TYPE ty_struc.
DATA ls_stru2 TYPE ty_struc.
DATA lt_itab  TYPE STANDARD TABLE OF ty_struc..
DATA i        TYPE i.
DATA j        TYPE i.
DATA start    TYPE i.
DATA stopp    TYPE i.

START-OF-SELECTION.
*** Generierung Testdaten
 DO 5000 TIMES.
   ls_struc-index = sy-index.
   CALL FUNCTION 'QF05_RANDOM_INTEGER'
     EXPORTING
       ran_int_max = 9
       ran_int_min = 1
     IMPORTING
       ran_int     = i.

   DO i TIMES.

     CALL FUNCTION 'QF05_RANDOM_INTEGER'
       EXPORTING
         ran_int_max = 15
         ran_int_min = 1
       IMPORTING
         ran_int     = j.
     ls_struc-field = sy-abcde+j(10).
     INSERT ls_struc INTO TABLE lt_itab.
   ENDDO.

 ENDDO.

 GET RUN TIME FIELD start.

 CASE p.
   WHEN '1'.
*** Variante 1: Normaler geschachtelter LOOP
     LOOP AT lt_itab INTO ls_struc.
       IF ls_stru2-index <> ls_struc-index.
         ls_stru2 = ls_struc.
         WRITE: / ls_struc-index COLOR COL_GROUP.
         LOOP AT lt_itab INTO ls_stru2 WHERE index = ls_struc-index.
           WRITE: AT /4 ls_stru2-field.
         ENDLOOP.
       ENDIF.
     ENDLOOP.

   WHEN '2'.
*** Variante 2: LOOP mit Index
     LOOP AT lt_itab INTO ls_struc.
       IF ls_stru2-index <> ls_struc-index.
         i = sy-tabix.
         ls_stru2 = ls_struc.
         WRITE: / ls_struc-index COLOR COL_GROUP.
         LOOP AT lt_itab INTO ls_stru2 FROM i WHERE index = ls_struc-index.
           WRITE: AT /4 ls_stru2-field.
         ENDLOOP.
       ENDIF.
     ENDLOOP.

 ENDCASE.

 GET RUN TIME FIELD stopp.

 stopp = stopp - start.
 MESSAGE s000(oo) WITH stopp 'ms'.

Ausgabe

        1
  DEFGHIJKLM
  JKLMNOPQRS
        2
  BCDEFGHIJK
  FGHIJKLMNO
  BCDEFGHIJK
  OPQRSTUVWX
  OPQRSTUVWX
  KLMNOPQRST
  MNOPQRSTUV
        3
  NOPQRSTUVW
  HIJKLMNOPQ
  OPQRSTUVWX
        4
  HIJKLMNOPQ
  HIJKLMNOPQ
  LMNOPQRSTU
        5
  HIJKLMNOPQ
  CDEFGHIJKL
  LMNOPQRSTU
  NOPQRSTUVW
  CDEFGHIJKL
  FGHIJKLMNO
  BCDEFGHIJK
  OPQRSTUVWX
  ...
  ...
  ...

Laufzeit Variante 1: ca. 6 Sek.

Laufzeit Variante 2: ca. 3 sek.

www.sapdatasheet.org

Wie bei vielen Entwicklungsobjekten umfasst www.sapdatasheet.org auch alle Funktionsbausteine und Funktionsgruppen