*&---------------------------------------------------------------------*
*& 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.
评论列表(1条)
相关表:TRDIR ,TAPLT