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