BSeg性能问题

2020-08-18 17:16发布

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

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


我的以下选择语句出现性能问题。

从bseg中将belnr dmbtr hkont koart zlsch选择到表it_bseg中,用于it_bkpf中的所有条目,其中belnr = it_bkpf-belnr和koart eq'K'。

请提出如何改善此声明的性能问题

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

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


我的以下选择语句出现性能问题。

从bseg中将belnr dmbtr hkont koart zlsch选择到表it_bseg中,用于it_bkpf中的所有条目,其中belnr = it_bkpf-belnr和koart eq'K'。

请提出如何改善此声明的性能问题

付费偷看设置
发送
5条回答
jovirus
1楼-- · 2020-08-18 17:22

您将必须使用部分主键来读取数据库,或者使用/创建索引。 (当前您不知道。)

在更改dev,quality和prod中的编码前后,请执行ST05 SQL跟踪分析,以查看是否使用了数据库访问密钥,或者是否进行了顺序搜索( 搜索整个数据库而不是按键):

现在,最好的选择是将公司代码(BUKRS)添加到选择语句中。

  • 如果仅是您需要考虑的一个,那是完美的
    DATA yourbukr TYPE bukrs。 "设置单个Bukrs
  • 如果是多个Bukrs,请使用带有Include Equals选项的范围对象
    DATA yourbukrs Bukrs的类型范围。"设置多个bukrs,例如 sign = I,option = EQ,low = yourbukr
    (绝对不排除,如果为模式或范围,则需要使用键或部分键并将值很好地限制为和)。
  • 但是,即使必须在范围对象中添加所有可用的公司代码,它仍然比仅具有文档编号(BELNR)更好,因为它将使用关键字搜索而不是 顺序搜索。

您可能需要考虑将" FOR it_bkpf中的所有条目"更改为范围语句。

  • 例如 在IT_BKPF中输入"数据类型为belnr_d的yourbelnrs的类型范围",并填写" sign = I,option = EQ,low = yourbelnr"。
  • 但是您可能会遇到太多的限制转储,具体取决于限制的数量和系统的限制设置(例如> 10'000)

如果要进一步调整,则需要添加会计年度(GJAHR)。 我认为添加订单项数(BUZEI)并没有帮助,因为要考虑的值太多。 如果您添加将添加/包括所有可能的BUZEI的限制,则无用。

以下是BSEG的关键组件。

 BUKRS BUKRS CHAR 4 0 0公司 码
 BELNR BELNR_D CHAR 10 0 0会计凭证编号
 GJAHR GJAHR NUMC 4 0 0会计年度
 BUZEI BUZEI NUMC 3 0 0会计凭证中的行项目数
 

这是您的编码的样子:

"是调整性能所必需的
 数据yourbukr TYPE bukrs。 设置单包
 数据yourbukrs的类型范围。 设置多个Bukrs,例如sign = I,option = EQ,low = yourbukr
 "可以调整性能的更多选择
 "范围在您的范围内,而不是在it_bkpf中包含所有条目
 数据类型为belnr_d。 设置多个belnr,例如IT_BKPF的sign = I,option = EQ,low = yourbelnr
 "还选择gjahr
 DATA yourgjahr TYPE gjahr。 设置单个gjahr
 数据yourgjahrs gjahr的类型范围。 设置多个gjahr,例如sign = I,option = EQ,low = yourgjahr

 "选项A)中的FOR ALL ENTESE
 SELECT BERNr dmbtr hkont koart zlsch
 从bseg到表it_bseg
 对于it_bkpf中的所有条目
 WHERE BUKRS = yourbukr是性能所必需的,如果是多个,则在yourbukrs中使用范围
   AND belnr = it_bkpf-belnr
 * AND gjahr = yourgjahr"可选,如果是倍数,请在yourgjahrs中使用范围
   和koart eq'K'。

 "选项B),范围为your yourn,而不是it_bkpf中为FOR ALL ENTRIES
 SELECT BERNr dmbtr hkont koart zlsch
 从bseg到表it_bseg
 WHERE BUKRS = yourbukr是性能所必需的,如果是多个,则在yourbukrs中使用范围
   如果限制太多(例如> 10'000),则不可能
 * AND gjahr = yourgjahr"可选,如果是倍数,请在yourgjahrs中使用范围
   和koart eq'K'。
 
Cikesha
2楼-- · 2020-08-18 17:36

嗨-您要达到什么目的?

访问索引表(例如BSIK甚至是逻辑数据库)可能更快(我们将BRM用于财务文档) )

callcenter油条
3楼-- · 2020-08-18 17:44

Hi

如果您要选择koart eq'K'的数据,

最好使用BSIK和BSAK表(

这将提供更快的结果。

此致

Venkat

奄奄一息的小鱼
4楼-- · 2020-08-18 17:25

Amit Kumar ,请告诉我,如果这对您有所帮助,或者您的问题是否仍然存在。

木偶小白
5楼-- · 2020-08-18 17:27

您说" BSIK和BSAK表(已被索引)。"

我想您的意思是隐含的是它们已经具有第一个索引列BELNR的索引。

< p>(仅说对表建立索引是没有意义的-即说按什么列进行索引)

一周热门 更多>