ABAP inner join 性能影响
2015-08-26 11:29
155 查看
业务背景:
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.
把修改前和修改后的代码都跑一跑,性能差别很大,新代码几乎不花时间。下图中 红色是原代码时间,绿色是新代码时间。
结果:
修改后用户使用,74个订单传输,原来要几个小时,现在半个小时内干完。。。
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个订单传输,原来要几个小时,现在半个小时内干完。。。
相关文章推荐
- MSXML中的SelectNodes和SelectSingleNode
- 行内元素与块元素的区别
- 一个简单的排序面试题
- Eclipse+Maven创建webapp项目
- 性能测试工具
- java类、对象概念
- Eclipse 导入外部项目无法识别为web项目 编译jar无法加载
- WebStorm中SVN插件问题
- 初识EF
- ajax(Asynchronous JavaScript and XML) 异步js或者xml
- ubuntu系统克隆
- 机房收费系统合作版之初体验
- 介绍几个不错的linux下载站和论坛
- iframe 自定义高度
- 定位
- hdu1695容斥原理
- 【ZOJ1586】【MST水题】【prim】
- Swift 运算属性
- windows socket编程,连续发送接收
- 《转》sql 、linq、lambda 查询语句的区别