|
在IDES上分别写了两个实现方法
数据量,MARD 20422条记录,MARDH 47324条记录
我的方法,耗时1.27秒,60%多的时间消耗在ABAP。
fengleihen的方法一,跑小数据量还行,跑全数据,超过500秒了,没出结果,实在无法忍受,喀嚓了
改成用两个sorted后的hashed table,用left-aligned key做loop,耗时142.86秒,99%以上的时间消耗在ABAP。
fengleihen的方法二,跑全数据,耗时54.47秒,98.3%的时间消耗在数据库。
我稍微修改了一下方法二,跑全数据,耗时1.11秒,79.4%的时间消耗在ABAP。
方法二修改:
LOOP AT GTD_TEMP.
SELECT
LFGJA
LFMON
WERKS
LGORT
MATNR
LABST AS KALAB "非限制
INSME AS KAINS "质检
SPEME AS KASPE "冻结
APPENDING CORRESPONDING FIELDS OF GTD_TMP2
FROM MARDH
UP TO 1 ROWS
WHERE WERKS IN S_WERKS
AND MATNR IN S_MATNR
AND LGORT IN S_LGORT
( LFGJA > P_GJAHR OR
( LFGJA = P_GJAHR AND
LFMON >= P_MONAT ) )
ORDER BY LFGJA ASCENDING
LFMON ASCENDING.
IF SY-SUBRC = 0.
GTD_TMP2 对象数据
else
GTD_TEMP 对象数据
ENDIF.
ENDLOOP.
改成
select * from mardh for all enteries in temp0
into table temp2
where 与方法二条件条件雷同
sort temp2 by LFGJA DESCENDING LFMON DECENDING.
loop at temp0.
read temp2 binary search
if sy-subrc = 0.
GTD_TMP2 对象数据
else.
GTD_TEMP 对象数据
endif
end loop. |
|