偶然间翻到一份关于SAP ABAP程序开发性能优化方面的老资料,快速过了一遍,乘着还有点印象练一下手。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
*&---------------------------------------------------------------------* *& 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 CARRID CONNID SUM( SEATSMAX ) INTO TABLE T_SFLIGHT FROM SFLIGHT UP TO 10 ROWS WHERE 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_SFLIGHT INTO DATA(WA_SFLLIGHT) WITH KEY CARRID = 'AA' BINARY SEARCH TRANSPORTING CARRID CONNID. WRITE : / WA_SFLLIGHT-CARRID, WA_SFLLIGHT-CONNID. CLEAR WA_SFLLIGHT. ENDLOOP. |
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/3206.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。