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

本文介绍ABAP中SQL查询与内表操作的最佳实践,包括使用字段列表而非通配符选择、利用子查询、高效删除重复及指定范围记录等方法,并提供了具体的代码示例。
<p>15、使用select 字段列表代替 Select *<br />不推荐<br />SELECT * FROM DD01L INTO DD01L_WA<br />  WHERE DOMNAME LIKE 'CHAR%'<br />        AND AS4LOCAL = 'A'.<br />ENDSELECT.<br />推荐<br />SELECT DOMNAME FROM DD01L<br />  INTO DD01L_WA-DOMNAME<br />  WHERE DOMNAME LIKE 'CHAR%'<br />        AND AS4LOCAL = 'A'.<br />ENDSELECT.</p><p>16、使用subquery代替多个select语句<br />不推荐<br />SELECT * FROM SPFLI<br />  INTO TABLE T_SPFLI<br />  WHERE CITYFROM = 'FRANKFURT'<br />    AND CITYTO = 'NEW YORK'.<br />SELECT * FROM SFLIGHT AS F<br />    INTO SFLIGHT_WA<br />    FOR ALL ENTRIES IN T_SPFLI<br />    WHERE SEATSOCC < F~SEATSMAX<br />      AND CARRID = T_SPFLI-CARRID<br />      AND CONNID = T_SPFLI-CONNID<br />      AND FLDATE BETWEEN '19990101' AND '19990331'.<br />ENDSELECT.<br />推荐<br />SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA<br />    WHERE SEATSOCC < F~SEATSMAX<br />      AND EXISTS ( SELECT * FROM SPFLI<br />                     WHERE CARRID = F~CARRID<br />                       AND CONNID = F~CONNID<br />                       AND CITYFROM = 'FRANKFURT'<br />                       AND CITYTO = 'NEW YORK' )<br />      AND FLDATE BETWEEN '19990101' AND '19990331'.<br />ENDSELECT.</p><p>17、如何快速删除重复内表的记录<br />不推荐<br />READ TABLE ITAB INDEX 1 INTO PREV_LINE.<br />LOOP AT ITAB FROM 2 INTO WA.<br />  IF WA = PREV_LINE.<br />    DELETE ITAB.<br />  ELSE.<br />    PREV_LINE = WA.<br />  ENDIF.<br />ENDLOOP.<br />推荐<br />DELETE ADJACENT DUPLICATES FROM ITAB<br />                COMPARING K.</p><p>18、如何快速删除内表一定范围内的记录<br />不推荐<br />DO 101 TIMES.<br />  DELETE ITAB INDEX 450.<br />ENDDO.<br />推荐<br />DELETE ITAB FROM 450 TO 550.</p><p>19、使用collect语句代替人工合计计算结果<br />不推荐<br />LOOP AT ITAB1 INTO WA1.<br />  READ TABLE ITAB2 INTO WA2 WITH KEY K = WA1-K BINARY SEARCH.<br />  IF SY-SUBRC = 0.<br />    ADD: WA1-VAL1 TO WA2-VAL1,<br />         WA1-VAL2 TO WA2-VAL2.<br />    MODIFY ITAB2 FROM WA2 INDEX SY-TABIX TRANSPORTING VAL1 VAL2.<br />  ELSE.<br />    INSERT WA1 INTO ITAB2 INDEX SY-TABIX.<br />  ENDIF.<br />ENDLOOP.<br />推荐<br />LOOP AT ITAB1 INTO WA.<br />  COLLECT WA INTO ITAB2.<br />ENDLOOP.<br />SORT ITAB2 BY K.</p><p>20、使用显示的work area 代替默认的work area<br />不推荐<br />ITAB = WA.<br />APPEND ITAB.<br />推荐<br />APPEND WA TO ITAB.</p><p>21、使用LOOP ...ASSIGNING代替loop ... modify.<br />不推荐(整条记录更新)<br />LOOP AT ITAB INTO WA.<br />  I = SY-TABIX MOD 2.<br />  IF I = 0.<br />    WA-FLAG = 'X'.<br />    MODIFY ITAB FROM WA.<br />  ENDIF.<br />ENDLOOP.<br />推荐(只会更新需要修改内容)<br />LOOP AT ITAB ASSIGNING <WA>.<br />  I = SY-TABIX MOD 2.<br />  IF I = 0.<br />    <WA>-FLAG = 'X'.<br />  ENDIF.<br />ENDLOOP.<br /></p><br><br><p id="TBPingURL">
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值