ABAP中两张按KNO排序的大表嵌套循环性能如何优化?
内表嵌套循环性能优化方案
优化核心逻辑
现有两张内表均已按关键字KNO升序排序,无需使用嵌套循环的O(n*m)时间复杂度实现,可改用**平行循环(并行遍历)**方案,将时间复杂度降至O(n+m),数据量越大性能提升越明显。
具体实现逻辑
- 定义变量存储
lt_items的遍历起始索引,初始值为1 - 仅循环一次表头表
lt_header,每次拿到当前行的KNO后,直接从之前记录的索引位置开始遍历行项目表lt_items - 匹配到相同
KNO的行项目时执行业务逻辑,当行项目的KNO大于当前表头的KNO时,立即终止内层循环并记录当前索引,供下一次表头循环使用
优化后代码示例
DATA: lv_item_index TYPE sy-tabix VALUE 1. LOOP AT lt_header INTO lwa_header. " 从上次中断的索引位置开始遍历行项目,避免重复扫描已匹配过的行 LOOP AT lt_items INTO lwa_item FROM lv_item_index WHERE key = lwa_header-KNO. " 原有业务逻辑保持不变 " …… ENDLOOP. " 记录当前循环中断的索引,下一次循环直接从该位置开始遍历 lv_item_index = sy-tabix. ENDLOOP.
额外优化说明
如果使用的ABAP版本支持7.40及以上,也可以将行项目表lt_items定义为按key的排序表/哈希表类型,配合带键读取操作也能提升性能,但对于已经预先按KNO排序好的两张表,上述平行循环方案是性能最优的实现,无额外的表类型转换开销。
内容的提问来源于stack exchange,提问作者sumedh patil
相关产品推荐
相关产品推荐

