如何调整ABAP程序的性能(续)

本文分享了ABAP编程中SQL语句及内表处理的最佳实践,包括使用字段列表替代通配符选择、利用子查询替代多条SELECT语句、高效删除重复或指定范围的记录等21种实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2006年08月01日 17:21:00

15、使用select 字段列表代替 Select *
不推荐
SELECT * FROM DD01L INTO DD01L_WA
WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
ENDSELECT.
推荐
SELECT DOMNAME FROM DD01L
INTO DD01L_WA-DOMNAME
WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
ENDSELECT.

16、使用subquery代替多个select语句
不推荐
SELECT * FROM SPFLI
INTO TABLE T_SPFLI
WHERE CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK'.
SELECT * FROM SFLIGHT AS F
INTO SFLIGHT_WA
FOR ALL ENTRIES IN T_SPFLI
WHERE SEATSOCC > F~SEATSMAX
AND CARRID = T_SPFLI-CARRID
AND CONNID = T_SPFLI-CONNID
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.
推荐
SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
WHERE SEATSOCC > F~SEATSMAX
AND EXISTS ( SELECT * FROM SPFLI
WHERE CARRID = F~CARRID
AND CONNID = F~CONNID
AND CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK' )
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.

17、如何快速删除重复内表的记录
不推荐
READ TABLE ITAB INDEX 1 INTO PREV_LINE.
LOOP AT ITAB FROM 2 INTO WA.
IF WA = PREV_LINE.
DELETE ITAB.
ELSE.
PREV_LINE = WA.
ENDIF.
ENDLOOP.
推荐
DELETE ADJACENT DUPLICATES FROM ITAB
COMPARING K.

18、如何快速删除内表一定范围内的记录
不推荐
DO 101 TIMES.
DELETE ITAB INDEX 450.
ENDDO.
推荐
DELETE ITAB FROM 450 TO 550.

19、使用collect语句代替人工合计计算结果
不推荐
LOOP AT ITAB1 INTO WA1.
READ TABLE ITAB2 INTO WA2 WITH KEY K = WA1-K BINARY SEARCH.
IF SY-SUBRC = 0.
ADD: WA1-VAL1 TO WA2-VAL1,
WA1-VAL2 TO WA2-VAL2.
MODIFY ITAB2 FROM WA2 INDEX SY-TABIX TRANSPORTING VAL1 VAL2.
ELSE.
INSERT WA1 INTO ITAB2 INDEX SY-TABIX.
ENDIF.
ENDLOOP.
推荐
LOOP AT ITAB1 INTO WA.
COLLECT WA INTO ITAB2.
ENDLOOP.
SORT ITAB2 BY K.

20、使用显示的work area 代替默认的work area
不推荐
ITAB = WA.
APPEND ITAB.
推荐
APPEND WA TO ITAB.

21、使用LOOP ...ASSIGNING代替loop ... modify.
不推荐(整条记录更新)
LOOP AT ITAB INTO WA.
I = SY-TABIX MOD 2.
IF I = 0.
WA-FLAG = 'X'.
MODIFY ITAB FROM WA.
ENDIF.
ENDLOOP.
推荐(只会更新需要修改内容)
LOOP AT ITAB ASSIGNING >WA<.
I = SY-TABIX MOD 2.
IF I = 0.
>WA<-FLAG = 'X'.
ENDIF.
ENDLOOP.



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1007417


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值