SAP ABAP 双层LOOP效率问题


前言

在开发过程中,不免遇到LOOP套LOOP的情况,那么我们应该怎么选择内表的排序方式呢?
以下为实验结果


实测结果

在这里插入图片描述
在这里插入图片描述

代码:

REPORT z_loop_test.

DATA: BEGIN OF ls_bkpf,
        bukrs TYPE bkpf-bukrs,
        belnr TYPE bkpf-belnr,
        gjahr TYPE bkpf-gjahr,
      END OF ls_bkpf,
      lt_bkpf LIKE STANDARD TABLE OF ls_bkpf,

      BEGIN OF ls_bseg,
        bukrs TYPE bkpf-bukrs,
        belnr TYPE bkpf-belnr,
        gjahr TYPE bkpf-gjahr,
        buzei TYPE bseg-buzei,
      END OF ls_bseg,
      lt_bseg      LIKE STANDARD TABLE OF ls_bseg,
      lt_bseg_sort LIKE SORTED TABLE OF   ls_bseg WITH NON-UNIQUE KEY bukrs belnr gjahr.

DATA  lv_tabix TYPE sy-tabix.

* Timestamp
DATA: lv_period TYPE timestampl,
      lv_start  LIKE lv_period,
      lv_end    LIKE lv_period.

START-OF-SELECTION.

  SELECT *
    FROM bkpf
    INTO CORRESPONDING FIELDS OF TABLE lt_bkpf.
  IF sy-subrc = 0.

    SELECT *
      FROM bseg
      INTO CORRESPONDING FIELDS OF TABLE lt_bseg.
    SELECT *
      FROM bseg
      INTO CORRESPONDING FIELDS OF TABLE lt_bseg_sort.

  ENDIF.
* Binary search try
  GET TIME STAMP FIELD lv_start.

  SORT lt_bseg BY bukrs ASCENDING
                  belnr ASCENDING
                  gjahr ASCENDING.
  LOOP AT lt_bkpf INTO ls_bkpf.

    READ TABLE lt_bseg WITH KEY bukrs = ls_bkpf-bukrs
                                belnr = ls_bkpf-belnr
                                gjahr = ls_bkpf-gjahr
                       BINARY SEARCH
                       TRANSPORTING NO FIELDS.
    IF sy-subrc = 0.

      lv_tabix = sy-tabix.

      LOOP AT lt_bseg INTO ls_bseg
           FROM lv_tabix.

        IF ls_bseg-bukrs <> ls_bkpf-bukrs
        OR ls_bseg-belnr <> ls_bkpf-belnr
        OR ls_bseg-gjahr <> ls_bkpf-gjahr.

          EXIT.

        ENDIF.

      ENDLOOP.

    ENDIF.

  ENDLOOP.

  GET TIME STAMP FIELD lv_end.

  lv_period = lv_end - lv_start.

  WRITE / 'Binary search test'.
  WRITE / lv_period.

* Sorted table test
  GET TIME STAMP FIELD lv_start.

  LOOP AT lt_bkpf INTO ls_bkpf.

    LOOP AT lt_bseg_sort INTO ls_bseg
         WHERE bukrs = ls_bkpf-bukrs
           AND belnr = ls_bkpf-belnr
           AND gjahr = ls_bkpf-gjahr.

    ENDLOOP.

  ENDLOOP.

  GET TIME STAMP FIELD lv_end.

  lv_period = lv_end - lv_start.

  WRITE / 'Sorted table test'.
  WRITE / lv_period.

结论

大数据量采用SORT表比使用binary search要快
小数据量使用binary search比采用SORT表快
开发时根据实际数据量选择

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些常见的SAP ABAP面试题,但并不会提供答案,因为这些问题需要您自己思考和回答。以下是一些可能会被问到的SAP ABAP面试题: 1. SAP ABAP是什么? 2. 如何在SAP ABAP中定义变量? 3. 什么是函数模块? 4. 如何在SAP ABAP中处理异常? 5. 如何在SAP ABAP中进行调试? 6. 什么是内表?如何定义内表? 7. 如何在SAP ABAP中处理日期和时间? 8. 如何在SAP ABAP中处理字符串? 9. 如何在SAP ABAP中使用SELECT语句? 10. 如何在SAP ABAP中使用LOOP语句? 11. 如何在SAP ABAP中使用IF语句? 12. 如何在SAP ABAP中使用CASE语句? 13. 如何在SAP ABAP中使用BREAK-POINT语句? 14. 如何在SAP ABAP中使用MESSAGE语句? 15. 如何在SAP ABAP中使用CATCH语句? 16. 什么是数据字典?如何定义数据字典对象? 17. 如何在SAP ABAP中使用ABAP OO? 18. 如何在SAP ABAP中使用ALV报表? 19. 如何在SAP ABAP中使用BAPI? 20. 如何在SAP ABAP中使用RFC? 21. 如何在SAP ABAP中使用IDoc? 22. 如何在SAP ABAP中使用ALE? 23. 如何在SAP ABAP中使用EDI? 24. 如何在SAP ABAP中使用BDC? 25. 如何在SAP ABAP中使用LSMW? 26. 如何在SAP ABAP中使用用户退出? 27. 如何在SAP ABAP中使用BADI? 28. 如何在SAP ABAP中使用Enhancement Spot? 29. 如何在SAP ABAP中使用Enhancement Section? 30. 如何在SAP ABAP中使用Function Exit? 31. 如何在SAP ABAP中使用事件? 32. 如何在SAP ABAP中使用ABAP List Viewer(ALV)? 33. 如何在SAP ABAP中使用SAP Query? 34. 如何在SAP ABAP中使用Smart Forms? 35. 如何在SAP ABAP中使用Adobe Forms? 36. 如何在SAP ABAP中使用BSP? 37. 如何在SAP ABAP中使用Web Dynpro? 38. 如何在SAP ABAP中使用SAPUI5? 39. 如何在SAP ABAP中使用Fiori Launchpad? 40. 如何在SAP ABAP中使用SAP HANA?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ggreekn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值