SAP接口超时:对 FOR ALL ENTRIES IN 的优化
SAP接口超时
经分析要10多分钟以上才出结果,且是这个语句耗时较长:
SELECTaufnrmatnrbdmnglgortmeinschargFROM resbINTO CORRESPONDING FIELDS OF TABLE lt_lylcddxhFOR ALL ENTRIES IN lt_lylcddWHERE aufnr IN r_aufnr
发现RESB有420万条记录,而该工厂只有2.8万条记录。要求先将入参的werks参数用上,实现减少执行时间的效果
SELECTaufnrmatnrbdmnglgortmeinschargFROM resbINTO CORRESPONDING FIELDS OF TABLE lt_lylcddxhFOR ALL ENTRIES IN lt_lylcddWHERE aufnr IN r_aufnrAND werks = in_werks
此时测试发现不再报超时错误,但仍然要花2分钟才出结果。
检查该表没有订单作为索引,优化建议有两个:
方案一:resb 表增加aufnr作为索引。
方案二:建议把数据直接取到内表,在内表中处理。
采用了方案二:
SELECTaufnrmatnrbdmnglgortmeinschargFROM resbINTO CORRESPONDING FIELDS OF TABLE lt_lylcddxh* FOR ALL ENTRIES IN lt_lylcdd "注释WHERE aufnr IN r_aufnrAND werks = in_werks
优化后,同样条件,执行后三秒出结果。
FOR ALL ENTRIES IN 是用内表与物理表结合查表,如果数据较多,查询条件没有索引,一般会很慢。比较好的方案是把数据取到内表中,在内表中再处理。