ABAP性能优化 LOOP WITH KEY COMPONENTS

有两个内表GT_DATA1GT_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.

可以对以上代码进行性能调优:

  1. 在定义内表的时候使用WITH NON-UNIQUE KEY key1 COMPONETS field1 field2

  2. 在第二次循环中的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不对哈希内表和排序表生效)。

参考文章:对ABAP程序调优的学习(四)LOOP WHERE KEY

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值