本教程之前的步骤,我们已经介绍了如何在 SAP ABAP 系统里使用事务码 SE11 创建数据库表,并编写 ABAP 代码来读取这些表。
我们创建了一个订单表 ZMYORDER
,包含订单 ID,订单描述和下单的客户 ID 三个字段:
同时有另一张表 ZPERSON
,存储了下单客户的 ID 和名称。
因为这些信息散落在两张表里,我编写了一个 ABAP 报表,打印出当前系统所有的订单ID
和下单的客户名称
:
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.
LOOP AT lt_order INTO ls_order.
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
来对这段代码进行优化。
在本教程的开篇文章,笔者就介绍过下面这张图,即 SAP ABAP 系统的经典三层架构:
我们在事务码 SE38
里编写的 ABAP 报表,执行时虽然看起来数据一下子就通过 SELECT 这一行 SQL 语句返回了,但背后实际执行了一些复杂的逻辑。
这些背后逻辑和本文这个报表如何调优,全文参考笔者这篇文章。
网友评论