选择查询性能改进。

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:45

你好,

感谢您的所有宝贵反馈。 我完成了任务。

樱桃小丸子0093
2楼-- · 2020-09-06 03:41

Rahul,

我想这可行,但是两次访问数据库仍然显得多余。 如果'000000'SELECT的结果存储在程序中,则将有特定的行项目,或者如果没有特定的项目,则将使用"默认"结果。

但是无论谁执行了功能要求,要么都不理解,要么无法在规范中正确解释。

一周热门 更多>