对ABAP程序调优的学习(二)select 改 read table

场景:

        年前我们最开始依靠SAP CQC顾问的优化方案,但SAP顾问应该是短时间没有消化这个程序,导致优化方案反而更慢,我们回退了程序。节前,我们的方案集中在使用并行方式处理数据,该方案技术上是成功的,但业务认为不好收集错误数据,没有采用。今天,ESB帮助优化了接口的工作方式,我再仔细跟踪了程序,和兴伟一起完成了本次优化。

只是对数据库的访问关注,就可以获得很多的优化方案,比如这个程序:

我们用ST12得到该程序的跟踪,关注点如下:

1、对MARA的访问有1365500这么多次,而且是访问数据库,虽然HANA数据库也是内存,但是到数据库取数需要经过网络的访问,每一次都有时间的损耗。

2、对MAKT的读取有396785次,也是访问的数据库。

3、对CABNT、CAWN、CAWNT的访问到了数据库,但是次数比较少,只有19224次。

4、对GT_PVCMPD的访问次数比较大,有346303次,但是没有经过数据库。

5、调用时间搓函数有396785次,但是没有访问到远程的数据库。

所以,我们先优化掉多次访问数据库的地方,把1、2、3处的代码改成一次读取表,避免多次访问数据库就可以获得很好的收益。从多次访问数据库优化到访问内表,对MAKT的访问从93秒降低到0.5秒,对MARA的访问从320秒降低到1秒。

不留下点代码,怎么体现这个ABAP的文章也,好吧,优化MAKT的代码DEMO如下:

”定义一个排序内表,后面查询快

DATA gt_makt TYPE SORTED TABLE OF makt WITH NON-UNIQUE KEY matnr spras.
DATA gs_makt TYPE makt.
“一次取全部数据到内表
  SELECT INTO TABLE gt_makt FROM makt.

“原代码

*          SELECT SINGLE maktx
*            INTO CORRESPONDING FIELDS OF ls_data3
*            FROM makt
*           WHERE matnr = ls_data3-matnr
*             AND spras = sy-langu.

"james_lx 2022.3.17 优化
 READ TABLE gt_makt WITH  KEY  matnr ls_data3-matnr spras sy-langu INTO gs_makt.

          IF sy-subrc 0.
            ls_data3-maktx =  gs_makt-maktx.
          ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值