打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用 FOR ALL ENTRIES 将 ABAP 内表内容作为数据库表的读取条件之一试读版
userphoto

2023.05.17 四川

关注

本教程之前的文章,我们已经介绍了如何用 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 应用程序内存中,显然是毫无必要的。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ABAP总结-转载,好全啊
我的BRF+自学教程(三):动态技术
ABAP Open SQL 分页查询
MySQL—触发器基础
表相关SQL(前提一定选中数据库)
ABAP 字符串换行符处理
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服