有两个内表GT_DATA1
和GT_DATA2
,分别有1000行和5000行,那么在进行以下双重Loop循环的时候会循环1000*5000 = 500,0000次,耗费时间较多:
LOOP AT GT_DATA1 INTO DATA(LS_DATA1).
...
LOOP AT GT_DATA2 INTO DATA(LS_DATA2) WHERE FIELD1 IS NOT INITIAL AND FIELD1 IS NOT INITIAL.
EXIT.
ENDLOOP.
...
ENDLOOP.
可以对以上代码进行性能调优:
-
在定义内表的时候使用
WITH NON-UNIQUE KEY key1 COMPONETS field1 field2
-
在第二次循环中的
WHERE
前面加上USING KEY key1
"定义 DATA:GT_DATA2 TYPE TABLE OF TY_DATA WITH NON-UNIQUE KEY KEY1 COMPONENTS FIELD1 FIELD2. LOOP AT GT_DATA1 INTO DATA(LS_DATA1). ... LOOP AT GT_DATA2 INTO DATA(LS_DATA2) USING KEY KEY1 WHERE FIELD1 IS NOT INITIAL AND FIELD1 IS NOT INITIAL. EXIT. ENDLOOP. ... ENDLOOP.
其中
NON-UNIQUE
对应的还有UNIQUE
,前者是接受KEY字段有相同值,后者是不允许KEY字段有相同值,COMPONENTS
后面对应的是WHERE
条件字段,(NON-UNIQUE
不对哈希内表和排序表生效)。