【04】SAP ABAP性能优化 - 如何选用内表类型(STANDARD, SORTED, HASHED)?

ABAP提供了三种类型的内表, 即:标准表(Standard Table), 排序表(Sorted Table), 哈希表(Hashed Table)。在未声明内表类型时,系统会将类型默认为标准表。

然而,标准表其实并不适用于所有的业务场景,我们应当根据实际的需求,定义使用合适类型的内表。

1. 内表的类型

让我们回顾下不同内表的访问方式。标准表和排序表是可以既通过index访问,有可通过key访问;而哈希表只能通过键值访问。

三种内表的特征如下表:

内表类型访问方式主键推荐方式查找算法
标准表索引访问、键值访问NON-UNIQUE KEY索引访问顺序查找法、二分查找法
排序表索引访问、键值访问NON-UNIQUE KEY 、UNIQUE KEY键值访问二分查找法
哈希表键值访问UNIQUE KEY键值访问哈希算法

2. 使用原则

  • 标准表:当数据量较小(<100 entries), 并既需要使用索引访问,又需要通过不同的键值访问时,可以定义使用标准表。当通过键值访问时,应当使用SORT + BINARY SEARCH的语法,也即使用二分查找算法替代顺序查找。在排序时,应尽量明确指定排序的字段。
  • 排序表:当访问内表的主要方式是通过“主键访问”时,应定义使用排序表。排序表的主键可以不唯一。
  • 哈希表:完全通过主键访问数据,并且在数据量较大时,应使用Hash表。在数据量不大时,Hash表的查找速度和Sorted表类似。在某种程度上,Hash表的性质等同于主键唯一的Sorted表。

3. 注意事项

  • 避免通过顺序查找的方式访问含有大量数据的内表;
  • 避免在嵌套的循环中,通过顺序查找的方式访问内表;
  • 无论哪一种内表,都要避免内表数据过大的情况发生,因为CPU的内存是有限的,无限制增加内表的数据量会至系统DUMP;
  • 对于大数量的情形,应采用分批次、分包的处理方式。

4. 示例

示例1: 对于标准表,使用二分查找替代顺序查找

DATA: lt_sflight        TYPE STANDARD TABLE OF sflight,
      ls_sflight        TYPE sflight.
*-------------------------------------------------------
* 标准表
SELECT * FROM sflight
   INTO TABLE lt_sflight UP TO 100 ROWS
        WHERE carrid = 'AA'
           OR carrid = 'LH'.
*-------------------------------------------------------           
* standard table - sequential read
*-------------------------------------------------------      
READ TABLE lt_sflight INTO ls_sflight
                  WITH KEY carrid = 'AA'
                           connid = '0064'
                           fldate = '20180403'.
IF sy-subrc = 0.
  WRITE: / ls_sflight-carrid, ls_sflight-planetype.
ENDIF.
*-------------------------------------------------------
* standard table - read with binary search
*-------------------------------------------------------      
SORT lt_sflight BY carrid connid fldate.
READ TABLE lt_sflight INTO ls_sflight
             BINARY SEARCH
                  WITH KEY carrid = 'AA'
                           connid = '0064'
                           fldate = '20180403'.
IF sy-subrc = 0.
  WRITE: / ls_sflight-carrid, ls_sflight-planetype.
ENDIF.

示例2: 使用主键不唯一的排序表

DATA:  lt_sflight_sorted TYPE SORTED TABLE OF sflight WITH NON-UNIQUE KEY carrid connid fldate,
       ls_sflight        TYPE sflight.
*-------------------------------------------------------
* 排序表
*-------------------------------------------------------
SELECT * FROM sflight
   INTO TABLE lt_sflight_sorted UP TO 100 ROWS
        WHERE carrid = 'AA'
           OR carrid = 'LH'.

READ TABLE lt_sflight_sorted INTO ls_sflight
      WITH TABLE KEY carrid = 'AA'
                     connid = '0064'
                     fldate = '20180403'.

IF sy-subrc = 0.
  WRITE: / ls_sflight-carrid, ls_sflight-planetype.
ENDIF.

示例3: 定义并使用哈希表

DATA: lt_sflight_hashed TYPE HASHED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate,
      ls_sflight        TYPE sflight.
*-------------------------------------------------------
* 哈希表
*-------------------------------------------------------
SELECT * FROM sflight
   INTO TABLE lt_sflight_hashed UP TO 100 ROWS
        WHERE carrid = 'AA'
           OR carrid = 'LH'.

READ TABLE lt_sflight_hashed INTO ls_sflight
      WITH TABLE KEY carrid = 'AA'
                     connid = '0064'
                     fldate = '20180403'.

IF sy-subrc = 0.
  WRITE: / ls_sflight-carrid, ls_sflight-planetype.
ENDIF.
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
《从实例学SAP ABAP编程1-10章》是一本SAP ABAP编程的经典入门教材。本书从简单的SAP ABAP编程入手,通过多个实例向读者展示了SAP ABAP编程的核心概念和语法。 在第一章中,本书通过一个简单的例子介绍了SAP ABAP编程的基础知识,讲解了ABAP编辑器、ABAP数据字典和ABAP Workbench等重要工具的用法。 在第二章中,本书通过一个简单的例子向读者介绍了ABAP表格的创建和维护,并讲解了一些与表格相关的SAP ABAP编程的语法和概念。 在第三章中,本书介绍了SAP ABAP编程中的面向对象编程,通过几个例子向读者展示了如何使用类、对象和继承等概念进行SAP ABAP编程。 在第四章中,本书介绍了SAP ABAP编程中的函数模块,向读者讲解了如何创建和调用函数模块,以及如何在SAP系统中使用函数模块。 在第五章中,本书介绍了SAP ABAP编程中的异常处理,向读者讲解了如何使用TRY/CATCH语句处理SAP系统中的异常情况。 在第六章中,本书介绍了SAP ABAP编程中的Web服务,向读者讲解了如何创建和使用SAP系统中的Web服务,以及如何使用HTTP和SOAP协议进行数据通信。 在第七章中,本书介绍了SAP ABAP编程中的ALV报表,向读者讲解了如何创建和维护SAP系统中的ALV报表,以及如何对报表进行数据操作和定制。 在第八章中,本书介绍了SAP ABAP编程中的BADI和Enhancement点,向读者讲解了如何使用BADI和Enhancement点扩展和修改SAP系统中的业务逻辑。 在第九章中,本书介绍了SAP ABAP编程中的Smart Form,向读者讲解了如何使用Smart Form创建和维护SAP系统中的表单。 在第十章中,本书介绍了SAP ABAP编程中的SAP HANA数据库,向读者讲解了如何使用SAP HANA数据库进行高效的数据处理和分析。 通过阅读本书,读者可以快速掌握SAP ABAP编程的核心知识和技能,从而能够独立进行SAP系统的开发和维护工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP-nkGavin

给作者赏杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值