美文网首页SAP 实用篇收藏SAP
使用 FOR ALL ENTRIES 将 ABAP 内表内容作为

使用 FOR ALL ENTRIES 将 ABAP 内表内容作为

作者: _扫地僧_ | 来源:发表于2023-05-12 09:55 被阅读0次

    本教程之前的文章,我们已经介绍了如何用 ST05 事务码,对一个 ABAP 报表进行性能分析和优化的步骤。

    重构后的代码:

    REPORT zdb_optimization.
    
    DATA:lt_order  TYPE TABLE OF zmyorder,
         ls_order  LIKE LINE OF lt_order,
         lt_person TYPE TABLE OF zperson,
         ls_person LIKE LINE OF lt_person.
    
    SELECT * INTO TABLE lt_order FROM zmyorder.
    
    SELECT * INTO TABLE lt_person FROM zperson.
    
    LOOP AT lt_order INTO ls_order.
      READ  TABLE lt_person into ls_person with key person_id = ls_order-customer_id.
      "SELECT SINGLE * INTO ls_person FROM zperson WHERE person_id = ls_order-customer_id.
      WRITE:/ 'order:', ls_order-order_id, ' user:', ls_person-person_name.
    ENDLOOP.
    

    下图是使用事务码 ST05 采集到的重构后的数据库表访问情况,对 ZMYORDER 和 ZPERSON 表分别各自只读取了一次,每次读取了4条数据出来。

    上一篇教程末尾,笔者提到,本报表的设计和实现仍然有进一步优化的空间。

    虽然我们重构后,已经成功将数据库表的总共读取次数,降低到两次,但是看上图第 10 行代码发现,我们将整张 zperson 表的全部内容,读取到了内表 lt_person 里。

    本例订单表 ZMYORDER 里能看到,系统总共只有三个用户下单,假设系统总共的注册用户不是例子里的4条(即下面第二张图),而是四千万条,那我们为了区区4条订单数据,而将四千万条用户数据全部从数据库表中取出,存储到 ABAP 应用程序内存中,显然是毫无必要的。

    下面是新一轮的性能优化思路的详细介绍。

    相关文章

      网友评论

        本文标题:使用 FOR ALL ENTRIES 将 ABAP 内表内容作为

        本文链接:https://www.haomeiwen.com/subject/oujjsdtx.html