Improving Performance of FOR ALL ENTRIES QUERY

本文介绍如何通过排序和删除重复记录来优化ABAP中FOR ALLENTRIES语句的性能,展示了具体实现方法及前后性能对比。

如何提高FOR  ALL ENTRIES的查询性能主要从两个方面入手
1 对FOR ALL ENTRIES的驱动表按比较关键字排序;

2  删除FOR ALL ENTRIES的驱动表中比较关键字排序;


REPORT ZEXIT_HELP no standard page heading.
DATA: it_mara TYPE STANDARD TABLE OF mara,
wa_mara TYPE mara,
it_makt TYPE STANDARD TABLE OF makt,
wa_makt TYPE makt,
it_temp_mara TYPE STANDARD TABLE OF mara,
wa_temp_mara TYPE mara.
* Get all the records from MARA
SELECT * FROM mara
INTO TABLE it_temp_mara.
IF sy-subrc = 0.
  IF it_temp_mara[] IS NOT INITIAL.
* Duplicate the driver table with the data
    do 2 times.
      append lines of it_Temp_mara to it_mara.
    enddo.
    IF it_mara[] IS NOT INITIAL.
* Select MAKT
      perform select_makt.
*After Sorting
      sort it_mara by matnr.
      perform select_makt.
* After deleting duoplicateentries
      DELETE ADJACENT DUPLICATES FROM it_mara COMPARING matnr.
      perform select_makt.
    ENDIF.
  ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form select_makt
*&---------------------------------------------------------------------*
* Select data friom MAKT
*----------------------------------------------------------------------*
form select_makt .
  DATA: t1 TYPE i,
  t2 TYPE i,
  tmin TYPE i.
  refresh it_makt[].
  GET RUN TIME FIELD t1.
  SELECT *
  FROM makt
  INTO TABLE it_makt
  FOR ALL ENTRIES IN it_mara
  WHERE matnr = it_mara-matnr.
  GET RUN TIME FIELD t2.
  tmin = t2 - t1.
  tmin = tmin .
  WRITE:/ ' Time(ms) = ', tmin.
Endform.                    "select_makt

测试结果

No of run Records in MARA Records in MAKT Time required ( mili-seconds)
Before sort After Sort After sort and delete adjacent duplicates 
112053719074040.263373.7382017.051
212053719074784.9533387.2412007.644
Average Time    

几个注意点:
1、有FOR ALL ENTRIES IN itab的不能使用order by;
2、如果 itab无数据,where语句就当没有条件处理;
3、系统自动删除重复纪录;

关于ranges和FOR ALL ENTRIES IN的使用大家可以参阅SAP的标准代码的使用方法,代码参见函数MRM_INVHEAD_MANY_READ,摘抄如下:

  SORT t_lifnr.
  DELETE ADJACENT DUPLICATES FROM t_lifnr.
  DESCRIBE TABLE t_lifnr LINES count.
  if count < 5000.
      SELECT * FROM rbkp INTO TABLE t_rbkp
                     WHERE belnr  IN t_belnr
                     AND   gjahr  IN t_gjahr
                     AND   bukrs  IN t_bukrs
                     AND   bldat  IN t_bldat
                     AND   budat  IN t_budat
                     AND   lifnr  IN t_lifnr
                     AND   ivtyp  IN rg_ivtyp.
    else.
      SELECT * FROM rbkp INTO TABLE t_rbkp
                     FOR ALL ENTRIES IN t_lifnr
                     WHERE lifnr  = t_lifnr-low
                     AND   belnr  IN t_belnr
                     AND   gjahr  IN t_gjahr
                     AND   bukrs  IN t_bukrs
                     AND   bldat  IN t_bldat
                     AND   budat  IN t_budat
                     AND   ivtyp  IN rg_ivtyp.
endif.


MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值