ABAP inner join 性能影响

本文探讨了在ERP系统中优化生产订单传输效率的技术解决方案,通过将内连接语句拆分为两次单独的查询,显著提高了订单传输速度,从数小时缩短至半小时。
业务背景:

ERP系统中有一个程序ZPPR0002,每次对MES系统发布ERP里的生产订单。

生产订单数据里面,包含有BOM组件,即组成成品车的1500条物料信息。


症状:

近日,业务人员反馈生产订单传输慢,一个订单要2分钟时间,一天80个订单,做完传输要几个小时。

 

原因:

通过SE30调试,发现程序90%的时间花费在一条inner join语句上。

该语句的作用是,查找3个字段的信息,放到每一个物料信息中。

程序对1500条物料做1500次查询,填充3个字段的信息。


解决办法:

原来一条inner join语句,最后的结果是得到一条STPO的数据,这给拆分该语句留下了空间。

既然最后结果只是为了得到一条数据,inner join 连接2张表的查询就应该可以分开成2次select single.
          

            "原来的代码 一条语句

            SELECT SINGLE A~POTX1 A~POTX2 A~SORTF INTO (GS_STPO-POTX1,GS_STPO-POTX2,GS_STPO-SORTF) FROM STPO  AS A
            INNER JOIN  RESB AS B ON A~STLNR = B~STLNR AND A~STLKN = B~STLKN AND A~STPOZ = B~STPOZ
            WHERE B~RSNUM = '0000009884'
            AND B~RSPOS = '0001'.
 
 
 
 


            "修改后的代码,两条语句

            SELECT SINGLE STLNR STLKN STPOZ INTO (GS_RESB-STLNR,GS_RESB-STLKN,GS_RESB-STPOZ)
            FROM RESB
            WHERE RSNUM = '0000009884'
            AND RSPOS = '0001'.

            SELECT SINGLE POTX1 POTX2 SORTF INTO (GS_STPO-POTX1,GS_STPO-POTX2,GS_STPO-SORTF)
            FROM STPO
            WHERE  STLNR = GS_RESB-STLNR AND STLKN = GS_RESB-STLKN AND STPOZ = GS_RESB-STPOZ.


把修改前和修改后的代码都跑一跑,性能差别很大,新代码几乎不花时间。下图中 红色是原代码时间,绿色是新代码时间。


结果:

修改后用户使用,74个订单传输,原来要几个小时,现在半个小时内干完。。。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘欣的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值