主要是取数据时候优化
1. 问题select/endselect对数据的处理效率底。
select matnr spras maktx from makt
from makt into table gt_makt
where spras = sy-langu.
MATNR IN LS_MATNR " 用IN可以 表范围
SINGLE "取单条数据
DISTINCT "去重
INTO CORRESPONDING FIELDS OF TABALE GT_MAKT. "使用时候不会出现名称匹配问题
2.READ语句使用二分法搜索
* SORT GT_MAKT BY MATNR.
READ TABLE GT_MAKT WITH KEY MATNR = GT_MARA-MATNR BINARY SEARCH [TRANSPORTING ON FIELDS].
READ TABLE GT_MAKT INTO GS_MAKT WHERE MATNR = '23'.
LOOP AT GT_MAT INTO GS_MAKT.
*下面效率更高
READ TABLE GT_MAKT ASSIGNING <FS_MAKT> WHERE MATNR = '23'.
LOOP AT GT_MAKT ASSINGING <FS_MAKT>
BINARY SEARCH [TRANSPORTING ON FIELDS]
"索引表才能用binary search ,transporting on fields 只读取不传值
3.Loop 中的select 语句
LOOP AT GT_MARA INTO GS_MARA.
MOVE-CORRESPONDING GS_MARA TO GS_TOTAL.
SEELCT SINGLE *
FROM MAKT
INTO CORRESPONDING FIELDS OF GS_MAKT
WHERE MATNR = GS_MARA-MATNR AND SPRAS = SY-LANGU.
GS_TOTAL-MAKTX = GS_MAKT-MAKTX.
APPEND GS_TOTAL TO GT_TOTAL.
END LOOP.
*修改后
IF GT_MARA IS NOT INTIAL.
"或者 CHECK GT_MARA IS NOT INITIAL.
SEELCT SINGLE *
FROM MAKT
INTO CORRESPONDING FIELDS OF GS_MAKT
FOR ALL ENTRIES IN GT_MARA WHERE SPRAS = SY-LANGU MATNR = GT_MARA-MATNR.
sort gt_makt by matnr.
LOOP AT GT_MARA INTO GS_MARA.
MOVE-CORRESPONDING GS_MARA TO GS_TOTAL.
GS_TOTAL-MAKTX = GS_MAKT-MAKTX.
APPEND GS_TOTAL TO GT_TOTAL.
END LOOP.
cheak,排序,循环
*loop里面尽量不要select.
*loop里面套loop 用小套大 ,from sy-tabix 可以帮助从哪行开始循环,循环套循环,减少循环
*sort 可以帮助优化查询
4.注意项:
不要select * 浪费cpu
不要select distinct 没有缓存
少用 相关子查询 和嵌套 select ... endselect.
查询一条语句: select single /select ...up to 1 rows.
inner join条件放置的位置因该按照 on ,where ,having顺序
统计用sql聚合函数;使用游标读取数据
根据主件或索引查找数据
根据索引字段进行order by 否则通过程序进行sort by.
避免使用索引字段上用 not/<>/!=/is null/is not null
sql中避免使用 like ,不要使用or
用内表批量操作数据库,不要用工作区一条条操作。
alv隐藏按钮 append SAVE to rt_extab. set pf-status 'st_status' excluding rt_extab.
ooavl隐藏按钮 set pf-status '0100' excluding gt_extab. alv fucntion里面有it_toolbar_excluding
去除前导0缀的办法:
1.移位
data:
str type char10 value '0010000000'.
shift str left deleting leading '0'.
shift str right deleting trailing '0'.
2.功能模块
'CONVERSION_EXIT_ALPHA_OUTPUT'
3.同各国变量转换
data:
int type i.
str type char10 value '001000000'.
int = str.
str = in.