选择查询性能改进。

2020-09-06 03:27发布

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

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


嗨,

由于我是ABAP世界的新手,因此我需要一些有关性能问题的建议。

在我的程序中,有多个选择单个查询命中数据库,其中存储了100k数据,并需要4-5个小时来获取结果。 我引用了许多博客和Google,并得知我可以将数据库中的所有数据放入内部表中并获取数据。 但是我很困惑如何实现它。 下面是代码。 谁能指导我如何提高性能,并在更短的时间内完成获取。 在这里,c_t_data中填充了100k条记录。 然后在其中触发了许多选择单个语句。

在c_t_data处循环播放。
清除:wa_za。

从mara中选择mara-matnr
在marn
中matar = c_t_data-matnr
并且lvorm =空间。< br>检查sy-subrc =0。

选择单个user4 waers
INTO(wa_za-yyuser4,wa_za-yywaers)
从aufk
在其中aufnr = c_t_data-aufnr。


选择单个kursk prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
那里vbeln = c_t_data-vbeln
并且posnr ='000000'。


选择单个库尔斯克prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
哪里vbeln = c_t_data-vbeln
和posnr = c_t_data-posnr。


选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
在vbeln = c_t_data-vbeln
和vposn ='000000'。


选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
那里vbeln = c_t_data-vbeln
和vposn = c_t_data-posnr。

选择tj30t〜txt04进入wa_za-yycontsts
从玩笑中加入
加入jsto
开启jsto〜objnr = jest〜objnr
加入tj30t
开启tj30t〜stsma = jsto〜stsma
在何处jest〜objnr = c_t_data-objnr
AND jest〜inact =空格
AND tj30t〜stsma = jsto〜stsma
AND tj30t〜estat = jest〜stat
AND tj30t〜spras ='EN '。
ENDSELECT。

清除wa_za-yyconroot。
移动c_t_data-vbeln(7)到wa_za-yyconroot。


从vbak中选择单个knumv到vbak-knumv
中,vbeln = c_t_data-vbeln。


从konv中选择单个kbetr到wa_za-yykbetr
中,knumv = vbak-knumv且
KPOSN ='000000'和
KSCHL ='ZDIS'。


选择vbeln parvw kunnr pernr parnr
从vbpa到表itab_vbpa
中,vbeln = c_t_data-vbeln。

预先感谢

库马尔。

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

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


嗨,

由于我是ABAP世界的新手,因此我需要一些有关性能问题的建议。

在我的程序中,有多个选择单个查询命中数据库,其中存储了100k数据,并需要4-5个小时来获取结果。 我引用了许多博客和Google,并得知我可以将数据库中的所有数据放入内部表中并获取数据。 但是我很困惑如何实现它。 下面是代码。 谁能指导我如何提高性能,并在更短的时间内完成获取。 在这里,c_t_data中填充了100k条记录。 然后在其中触发了许多选择单个语句。

在c_t_data处循环播放。
清除:wa_za。

从mara中选择mara-matnr
在marn
中matar = c_t_data-matnr
并且lvorm =空间。< br>检查sy-subrc =0。

选择单个user4 waers
INTO(wa_za-yyuser4,wa_za-yywaers)
从aufk
在其中aufnr = c_t_data-aufnr。


选择单个kursk prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
那里vbeln = c_t_data-vbeln
并且posnr ='000000'。


选择单个库尔斯克prsdt
INTO(wa_za-yykursk,wa_za-yyprsdt)
从vbkd
哪里vbeln = c_t_data-vbeln
和posnr = c_t_data-posnr。


选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
在vbeln = c_t_data-vbeln
和vposn ='000000'。


选择单个vbegdat venddat
INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
从veda
那里vbeln = c_t_data-vbeln
和vposn = c_t_data-posnr。

选择tj30t〜txt04进入wa_za-yycontsts
从玩笑中加入
加入jsto
开启jsto〜objnr = jest〜objnr
加入tj30t
开启tj30t〜stsma = jsto〜stsma
在何处jest〜objnr = c_t_data-objnr
AND jest〜inact =空格
AND tj30t〜stsma = jsto〜stsma
AND tj30t〜estat = jest〜stat
AND tj30t〜spras ='EN '。
ENDSELECT。

清除wa_za-yyconroot。
移动c_t_data-vbeln(7)到wa_za-yyconroot。


从vbak中选择单个knumv到vbak-knumv
中,vbeln = c_t_data-vbeln。


从konv中选择单个kbetr到wa_za-yykbetr
中,knumv = vbak-knumv且
KPOSN ='000000'和
KSCHL ='ZDIS'。


选择vbeln parvw kunnr pernr parnr
从vbpa到表itab_vbpa
中,vbeln = c_t_data-vbeln。

预先感谢

库马尔。

付费偷看设置
发送
8条回答
奄奄一息的小鱼
1楼-- · 2020-09-06 03:52

为什么是

 SELECT SINGLE kursk prsdt
 INTO(wa_za-yykursk,wa_za-yyprsdt)
 来自vbkd
 其中vbeln = c_t_data-vbeln
 AND posnr ='000000'。

 选择单个库尔斯克档案
 INTO(wa_za-yykursk,wa_za-yyprsdt)
 来自vbkd
 其中vbeln = c_t_data-vbeln
 AND posnr = c_t_data-posnr。
 


选择单个vbegdat venddat
 INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
 从吠陀
 其中vbeln = c_t_data-vbeln
 AND vposn ='000000'。

 选择单个vbegdat venddat
 INTO(wa_za-yyvbegdat,wa_za-yyvenddat)
 从吠陀
 其中vbeln = c_t_data-vbeln
 AND vposn = c_t_data-posnr。
 

重复?

您应该将一些单独的单选合并到一个联接中。

除了您使用的标题行已过时之外,因此,我建议您在公司中找一位经验丰富的ABAP-er来协助您完成此任务。

亲切的问候 ,罗伯·迪勒曼斯(Rob Dielemans)

clasier
2楼-- · 2020-09-06 03:29

嗨,

1。 首先检查表c_t_data中是否有重复项。 如果是,请复制并删除adj dups,并将其用于后续选择。

2。 从循环中删除所有选择。

zhangjiyang1323
3楼-- · 2020-09-06 03:43

嗨,Rahul,
我可以看到您正在循环中使用多个选择查询。 根据 SAP标准,您必须尝试减少在 嵌套方法。

您可以使用以下方法来改进ABAP代码:

1。 通过联接选择

2。 使用ABAP CDS

3。 尽可能使用内部表

以上所有示例都实现了这些概念。

槿木_熙
4楼-- · 2020-09-06 03:53

嗨,

如果我将删除循环内的所有选择查询,那么我将如何实现它?

谢谢。

spaceman01
5楼-- · 2020-09-06 03:39

您好,Rahul Kumar,请尝试了解事务ATRA,ST12和ST05如何改进哈希表,排序表和标准表等内部表。

< p>关于Roberto,

四川大学会员
6楼-- · 2020-09-06 03:39

Rahul Kumar 我想 Dev Parbutteea 建议是在循环之前使用SELECT ... for itab_copy_no_duplicates中的所有条目。

一周热门 更多>