Obwohl Sie nicht genügend Informationen zur Verfügung haben, um völlig sicher zu sein, was das eigentliche Problem ist, könnte man annehmen, dass das Leistungsproblem die Tatsache ist, dass Sie Nicht-Schlüsselfelder im Zustand der Schleife verwenden.
LOOP AT lt_tab INTO ls_tab
WHERE ((value1 EQ lv_id1) AND
(value2 LE lv_id2 AND value3 GE lv_id3)).
Sie könnten einen sekundären sortierten Schlüssel für den Tabellentyp der Variablen lt_tab
definieren, die die Felder value1
, value2
und value3
enthalten würde.
Sehen Sie sich das folgende Beispiel an.
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
class_constructor,
main.
PRIVATE SECTION.
TYPES: BEGIN OF t_record,
transid TYPE sy-index,
item1 TYPE char20,
value1 TYPE p LENGTH 7 DECIMALS 2,
value2 TYPE p LENGTH 7 DECIMALS 2,
value3 TYPE p LENGTH 7 DECIMALS 2,
value4 TYPE p LENGTH 7 DECIMALS 2,
END OF t_record,
tt_record TYPE STANDARD TABLE OF t_record WITH NON-UNIQUE KEY transid item1.
* tt_record TYPE STANDARD TABLE OF t_record WITH NON-UNIQUE KEY transid item1 WITH UNIQUE SORTED KEY sec_key COMPONENTS value1 value2 value3.
CONSTANTS:
mc_value1 TYPE p LENGTH 7 DECIMALS 2 VALUE '100.00',
mc_value2 TYPE p LENGTH 7 DECIMALS 2 VALUE '150.00',
mc_value3 TYPE p LENGTH 7 DECIMALS 2 VALUE '10.0'.
CLASS-DATA:
mt_record TYPE tt_record.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD class_constructor.
DO 2000000 TIMES.
INSERT VALUE t_record(transid = sy-index item1 = |Item{ sy-index }| value1 = sy-index value2 = sy-index/2 value3 = sy-index/4 value4 = 0)
INTO TABLE mt_record.
ENDDO.
ENDMETHOD.
METHOD main.
DATA:
l_start TYPE timestampl,
l_end TYPE timestampl,
l_diff LIKE l_start.
GET TIME STAMP FIELD l_start.
LOOP AT mt_record INTO DATA(ls_record) "USING KEY sec_key
WHERE value1 = mc_value1 AND value2 >= mc_value2 AND value3 <= mc_value3.
ASSERT 1 = 1.
ENDLOOP.
GET TIME STAMP FIELD l_end.
l_diff = l_end - l_start.
WRITE:/l_diff.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main().
Wenn der Tabellentyp tt_record
in der folgenden Art und Weise definiert ist
tt_record TYPE STANDARD TABLE OF t_record WITH NON-UNIQUE KEY transid item1.
dann die Laufzeit der Schleife auf meinem SAP-System unterscheidet sich von 0.156
zu 0.266
Sekunden.
Wenn Sie es jedoch definieren, wie
folgt
tt_record TYPE STANDARD TABLE OF t_record WITH NON-UNIQUE KEY transid item1 WITH UNIQUE SORTED KEY sec_key COMPONENTS value1 value2 value3.
und die Schleife anpassen, indem Sie den Hinweis Hinzufügen USING KEY sec_key
dann die Laufzeit ich jedes Mal bekommen 0.00
ist.
Dies ist sicherlich nicht der vollständige Code. Bitte geben Sie ein vollständiges Beispiel zusammen mit der Struktur der fraglichen Tabelle an. – vwegert
Wie kann ich diese Schleifenanweisung optimieren? –
Sie könnten die if-Anweisung vereinfachen und 'ASSIGNING' anstelle von' INTO' verwenden, aber das würde Ihnen keinen sehr großen Vorteil bringen. Das eigentliche Ziel und mehr Code würde helfen –