SAP接口超时:对 FOR ALL ENTRIES IN 的优化

SAP接口超时 在这里插入图片描述
经分析要10多分钟以上才出结果,且是这个语句耗时较长:

 SELECT
  aufnr
  matnr
  bdmng
  lgort
  meins
  charg
  FROM resb
  INTO CORRESPONDING FIELDS OF TABLE lt_lylcddxh
  FOR ALL ENTRIES IN lt_lylcdd
  WHERE aufnr IN r_aufnr

发现RESB有420万条记录,而该工厂只有2.8万条记录。要求先将入参的werks参数用上,实现减少执行时间的效果

 SELECT
  aufnr
  matnr
  bdmng
  lgort
  meins
  charg
  FROM resb
  INTO CORRESPONDING FIELDS OF TABLE lt_lylcddxh
  FOR ALL ENTRIES IN lt_lylcdd
  WHERE aufnr IN r_aufnr
    AND werks = in_werks

此时测试发现不再报超时错误,但仍然要花2分钟才出结果。
在这里插入图片描述
检查该表没有订单作为索引,优化建议有两个:
方案一:resb 表增加aufnr作为索引。
方案二:建议把数据直接取到内表,在内表中处理。
采用了方案二:


 SELECT
  aufnr
  matnr
  bdmng
  lgort
  meins
  charg
  FROM resb
  INTO CORRESPONDING FIELDS OF TABLE lt_lylcddxh
  * FOR ALL ENTRIES IN lt_lylcdd "注释
  WHERE aufnr IN r_aufnr
    AND werks = in_werks

优化后,同样条件,执行后三秒出结果。

FOR ALL ENTRIES IN 是用内表与物理表结合查表,如果数据较多,查询条件没有索引,一般会很慢。比较好的方案是把数据取到内表中,在内表中再处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值