ABAP inner join 性能影响



业务背景:

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.

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 20:51:19

ABAP inner join 性能影响的相关文章

6.4 Schema 设计对系统的性能影响

前面两节中,我们已经分析了在一个数据库应用系统的软环境中应用系统的架构实现和系统中与数据库交互的SQL 语句对系统性能的影响.在这一节我们再分析一下系统的数据模型设计实现对系统的性能影响,更通俗一点就是数据库的Schema 设计对系统性能的影响. 在很多人看来,数据库Schema 设计是一件非常简单的事情,就大体按照系统设计时候的相关实体对象对应成一个一个的表格基本上就可以了.然后为了在功能上做到尽可能容易扩展,再根据数据库范式规则进行调整,做到第三范式或者第四范式,基本就算完事了 数据库Sch

js性能影响

1.for()语句性能优于for(...in...)语句 2.避免重复创建函数,避免使用闭包.推荐使用prototype追加方法 3.判断一个js对象是否支持某个属性或方法时使用if(typeof(person.attr)!='undefined') ,考虑到当person.attr=null,0,false的情况 4.在IE中根据name属性取得SPAN元素:w3c规范中getElementsByName是按着name属性进行检索的,而MS的IE却是按着id来检索,导致不能得到应该得到的Ele

关于单例模式这种比上面1、2都好一些,既实现了线程安全,又避免了同步带来的性能影响。

Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个P

C#异常性能影响

何谓异常 很多人在讨论异常的时候很模糊,仿佛所谓异常就是try{}catch{},异常就是Exception,非常的片面,所以导致异常影响性能,XXXX……等很多奇怪的言论,所以在此我意在对异常正名.以下,我将异常这个很宽泛,容易被曲解的词进行严格的划分. 异常机制 所谓异常机制也就是指的语言平台支持异常这种错误处理模式的机制,比如c#里的Exception对象,try{}catch{}finally{}结构,throw抛出异常的语句,等等,均为c#语言里对异常机制的实现. 异常机制是随着语言而

oracle数据库性能影响之Sql parse

1,Sql parse的种类 Sql parse又通常分为硬解析和软解析,当sql第一次执行的时候,会发生硬解析,之后的执行如果在shared pool中能找到就是软解析.因此,为提高数据性能,尽可能的让每次执行的SQL在shared pool找到. 2,SQL在哪些情况下会发送硬解析? 1)统计信息改变  2)Sql中的表上有做ddl操作,包括grant和revoke. 3)执行计划被踢出shared pool 4)开启了trace 5)绑定变量长度变化 6)启用outlin

探究 Oracle 高水位对数据库性能影响

2016-08-11 陈龙 恩墨学院 探究 Oracle 高水位对数据库性能影响1大家好!我是来自云和恩墨的陈龙,目前主要负责Oracle技术支持工作.在我开始学习Oracle 的时候就听eygle老师说过,要想学好技术,一定要要多做实验,多做学习记录,理论与实践相结合,才能真正理解吸收那些知识,所以今天我想分享一下对Oracle高水位线与SQL访问性能相关性的研究体会.谈不上很深入的研究,只是想与大家分享我的Oracle学习过程,希望能与大家交流进步.之所以分享这个学习内容,是因为在我曾经经历

numa对MySQL多实例性能影响

numa对MySQL多实例性能影响,通过对numa将MySQL绑定在不同的CPU节点上,并且采用绑定的内存分配策略,强制在本节点内分配内存.具体测试如下:1.关闭numa(numa= interleave),MySQL单实例:开启numa(numa=default),MySQL单实例,进行性能测试,比较测试结果.2.numa隔离MySQL两个实例,instance1绑定到0,instance2绑定到1:无numa隔离的MySQL两个实例,进行性能测试,比较测试结果.3.numa隔离MySQL四个

unity UGUI text font size对性能影响巨大

Font Size对ugui text的性能影响非常大. <Cube Duck Run>在itouch5上测试是很流畅的,但是在iphone5上测试,在game over后显示历史最高分时却总会卡好几秒,导致游戏体验极差.使用屏蔽法查了两天终于找到了问题的原因,原来显示历史最高分的text的font size设成了150.其实本来font size为50就够了,但是由于text的父节点上有个0.3倍的缩放,所以导致text的font size设成150其大小在屏幕上看起来才会适,当初编辑界面的

PHP NOTICE级错误提示对程序性能影响的研究

本地打开dev项目,发现很多notice级别错误.找了一下相关文章,发现这样一篇文章,大家可以阅读以下. 地址:http://be-evil.org/php-error-handle-benchmark.html 核心关注:关闭掉PHP错误输出并不会关闭php内核对错误的处理,代码中如果有大量的Notice级别的错误,还是会降低php程序的性能.所以我们在开发的时候还是要将错误级别开至E_ALL,谨慎的处理掉每处不合理的代码,这样既可以提高了代码的严谨性,也提高了代码的运行性能. PHP NOT