程序优化需要注意的东西---慢慢累积

1.使用WHERE条件减少循环次数;

推荐:

SELECTION-OPTIONS: s_vbeln FOR vbak-vbeln.

LOOP AT itab WHERE vbeln IN s_vbeln.
       ……
ENDLOOP.

不推荐:

SELECTION-OPTIONS: s_vbeln FOR vbak-vbeln.

LOOP AT itab.
    IF itab-vbeln IN s_vbeln.
       ……
    ENDIF.
ENDLOOP.

2.尽量避免使用MOVE-CORRESPONDING 和 INTO CORRESPONDING FIELDS OF;

CORRESPONDING语句在系统内部存在隐式操作:

这条以前还真没注意到,不过不用-CORRESPONDING的话,得特别小心字段的匹配,不然不报错就是数据对不上了。

3.使用SORTED TABLE 和 HASHED TABLE表类型;

4.使用 BINARY SEARCH 二分查找算法;

这个也有注意事项;

必须根据查询条件进行排序,而且必须是升序,也就是系统默认的排序、

5.使用较高效的 DELETE ADJACENT DUPLICATES FROM 删除内表邻近重复记录;

就是说你用select的时候不要排除重复项,当然你也得注意排序,保留的规则是第一条数据;

6.使用较高效的COLLECT语句对记录进行聚集加总;

注意: COLLECT语句的效率只体现在当你使用的是顺序表和哈希表的时候,或者内表经过有效排序之后。否则当内表数据过多时,检索时间会很长,一般不推荐使用在记录条数非常多的标准表


7.嵌套loop语句,可以用先read在loopat from。

这个我得重点说下了,相信很多人看不太明白,认真看下下面这段代码

        LOOP AT LT_VDGROUP INTO LS_VDGROUP02 WHERE VGROUP = LS_VDGROUP01-VGROUP.
          READ TABLE IT_REL ASSIGNING <L_FS_REL> WITH KEY LIFNR = LS_VDGROUP02-LIFNR
            BINARY SEARCH.
          IF SY-SUBRC = 0.
            LOOP AT IT_REL ASSIGNING <L_FS_REL> FROM SY-TABIX.
              IF <L_FS_REL>-LIFNR <> LS_VDGROUP02-LIFNR.
                EXIT.
              ENDIF.

              READ TABLE IT_REL2 ASSIGNING <L_FS_REL2> WITH KEY
                EBELN = <L_FS_REL>-EBELN BINARY SEARCH.
              IF SY-SUBRC <> 0 .
                ADD <L_FS_REL>-BRTWR TO <G_FS_VENDOR>-UNDEL.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ENDLOOP.


样降低数据库负载

说白了就是减少I/O操作

1.避免使用SELECT ENDSELECT语句;

2.避免使用SELECT *

3.使用FOR ALL ENTRIES IN 语句联接数据表和内表;

这个值得推敲

4.使用索引提高查询效率;

5.避免使用SQL ORDER BY 语句, SORT语句会更高效;

6.使用SQL聚合函数MAX, MIN, COUNT, AVG, SUM

程序内存使用的优化-1

§使用OCCURS n 与 OCCURS 0 的区别。

OCCURS n 代表初始化内表的空间大小为n(空间固定), 当内表存储记录条数超出n时, 系统将依靠页面文件存放超出部分的数据。 当系统内存资源十分紧缺的时候, 我们可以使用OCCURS n的初始化方法,但是这样的效率稍微慢。

OCCURS 0 代表初始化内表的空间大小为无限,当内表存储记录条数不断增加时, 内表所使用的内存空间不断扩大, 直到系统无法分配为止。 使用内存比使用页面交换更快一些,但是要考虑系统的资源状态。


程序内存使用的优化-2

§使用SELECT … PACKAGE SIZE n 分段查询数据,减低数据库缓存负担.

SELECT …… INTOTABLE itab PACKAGE SIZE 100 FROM VABK ……

该语句实现没次打开DB会话时, 往应用服务器上传输100条记录, 然后关闭会话,刷新缓存。 用于在数据库缓存资源紧缺的情况使用。

§使用完成后及时清空释放内表

   RefreshITAB;

   Free ITAB.








  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值