乐趣区

关于sap:使用-FOR-ALL-ENTRIES-将-ABAP-内表内容作为数据库表的读取条件之一试读版

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

  • 94. 应用事务码 ST05 对 SAP 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 应用程序内存中,显然是毫无必要的。

上面是新一轮的性能优化思路的具体介绍。

退出移动版