performance
-
ABAP性能优化小例子
偶然间翻到一份关于SAP ABAP程序开发性能优化方面的老资料,快速过了一遍,乘着还有点印象练一下手。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566*&---------------------------------------------------------------------**& Report ZTEST020*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT ZTEST020.*DATA:T1 TYPE I,* T2 TYPE I,* TIME TYPE I.*TABLES:SPFLI.*GET RUN TIME FIELD T1.*SELECT * FROM SPFLI WHERE DEPTIME = '150000'.*ENDSELECT.*GET RUN TIME FIELD T2.*TIME = TIME + T2 - T1.*WRITE:/ TIME.*CLEAR:T1,T2,TIME.*ULINE.*GET RUN TIME FIELD T1.*SELECT * FROM SPFLI WHERE CARRID = 'LH'* AND CONNID = '0455'. " deptime = '150000'.*ENDSELECT.*GET RUN TIME FIELD T2.*TIME = TIME + T2 - T1.*WRITE:/ TIME.TYPES: BEGIN OF TYP_SFLIGHT,CARRID TYPE SFLIGHT-CARRID,CONNID TYPE SFLIGHT-CONNID,END OF TYP_SFLIGHT.DATA T_SFLIGHT TYPE TABLE OF TYP_SFLIGHT.*性能优化tips SQL*1.只查询需要用到的字段,减少传输*2.使用sum而不是查询出来之后loop汇总*3.如果条数确定用UP TO 10 ROWS,而不是靠判断SY_DBCNT*4.无论如何,给一个where条件吧*5.如果表结构确定,不要使用corresponding,费时间*6.在ABAP中排序,而不是SQL中用ORDER BY*7.where条件尽量使用主键字段,而不是其他值字段,尽量避免整表扫描SELECT CARRIDCONNIDSUM( SEATSMAX )INTO TABLE T_SFLIGHTFROM SFLIGHTUP TO 10 ROWSWHERE CARRID LIKE 'A%'GROUP BY CARRID CONNID.SORT T_SFLIGHT BY CARRID.*性能优化tips 程序.*1.不可避免的要使用多层循环的情况下,用指针存储循环出来的值*2.使用BINARY SEARCH*3.使用TRANSPORTING只传输需要的字段,不要用move-corresponding*4.append/modify/insert/delete操作时尽量用表而不是一行一行的LOOP AT T_SFLIGHT ASSIGNING FIELD-SYMBOL(<FS1>).READ TABLE T_SFLIGHTINTO DATA(WA_SFLLIGHT)WITH KEY CARRID = 'AA' BINARY SEARCHTRANSPORTING CARRID CONNID.WRITE : / WA_SFLLIGHT-CARRID, WA_SFLLIGHT-CONNID.CLEAR WA_SFLLIGHT.ENDLOOP.