Itab的循环很慢

2020-09-25 23:07发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我已经声明了一个内部表,例如 ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我已经声明了一个内部表,例如

数据:wa_collectoraction TYPE zcollectoraction,
       it_collectoraction类似于zcollectoraction的标准表。

我们有以下记录:

200-1000-620-201708-20170819-20170819121212.356 ................................. ............

200-1000-620-201708-20170819-20170819121211.356 .................................... .....

200-1000-620-201708-20170815-20170815121211.31.3 .................................... ......

200-1000-620-201707-20170710-20170710121200.356 ................................. ......

200-1000-620-201707-20170710-20170710121100.356 .................................... ......

200-1000-620-201707-20170709-20170709121100.356 .................................... ......

然后我用以下2条记录填充表格

200-1000-620-201708-20170819

200-1000-620-201707-20170710

选择bukrs kunnr yearmonth MAX(dat)AS dat
 来自zcollectoraction
   到表it_collectoraction的对应字段
 so_bukrs在哪里以及
       kunnr IN so_kunnr AND
       日期
 GROUP BY Bukrs kunnr yearmonth。

最后,我进入了以下循环,获取每个记录的最长时间,然后使用关键字段获取记录的所有剩余字段。

在it_collectoraction INTO wa_collectoraction中循环。
 PERFORM progress_bar使用"正在检索数据..."(035)
                            sy-tabix
                            i_tab_lines。
 "为所有线路获取最大时间,以解决我们有多于一条线路的情况。
 选择单*从zcollectoraction
     wa_collectoraction的相应领域
   其中bukrs = wa_collectoraction-bukrs并且
         kunnr = wa_collectoraction-kunnr AND
         dat = wa_collectoraction-dat和
         时间=(SELECT MAX(时间)AS时间
                     来自zcollectoraction
                     其中bukrs = wa_collectoraction-bukrs并且
                           kunnr = wa_collectoraction-kunnr AND
                           dat = wa_collectoraction-dat)。

 从wa_collectoraction修改it_collectoraction。
 ENDLOOP。

此循环执行5分钟,记录3000条记录。 循环的itab拥有30500条记录。

我希望自己变得更加清晰。

有人可以告诉我怎么做才能更快?

预先感谢

15条回答
shere_lin
2020-09-26 00:07

您是否尝试过某些子查询,如

选择bukrs kunnr yearmonth dat max(时间)
   来自zcollectoraction AS a
   到表it_collectoraction的对应字段
   so_bukrs在哪里
     AND kunnr IN so_kunnr
     和dat IN(SELECT max(dat)
                    来自zcollectoraction AS b
                    在哪里b〜bukrs EQ a〜bukrs
                      与b〜kunnr EQ a〜kunnr
                      AND b〜dat IN_date
                      AND b〜yearmonth EQ a〜yearmonth)
   GROUP BY Bukrs Kunnr年月日。
 

当然,首先要检查数据库表上是否有足够的索引。

对于那些(大多数)无权访问您的z表的用户,您可以使用

针对任何类型的循环/选择单个/结束循环或所有条目来检查性能。
 SELECT bukrs blart cpudt MAX(cputm)AS cputm
     来自bkpf AS a
     表格itab的相应字段
     so_bukrs在哪里
       AND blart在so_blart
       和cpudt IN(SELECT MAX(cpudt)
                      从bkpf AS b
                      在哪里b〜bukrs EQ a〜bukrs
                        与b〜blart EQ a〜blart
                        AND b〜cpudt在so_cpudt中)
     

一周热门 更多>