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 sflightINTO TABLE lt_sflight UP TO 100 ROWSWHERE carrid = 'AA'OR carrid = 'LH'.
*-------------------------------------------------------
* standard table - sequential read
*-------------------------------------------------------
READ TABLE lt_sflight INTO ls_sflightWITH 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_sflightBINARY SEARCHWITH 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 sflightINTO TABLE lt_sflight_sorted UP TO 100 ROWSWHERE carrid = 'AA'OR carrid = 'LH'.READ TABLE lt_sflight_sorted INTO ls_sflightWITH 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 sflightINTO TABLE lt_sflight_hashed UP TO 100 ROWSWHERE carrid = 'AA'OR carrid = 'LH'.READ TABLE lt_sflight_hashed INTO ls_sflightWITH TABLE KEY carrid = 'AA'connid = '0064'fldate = '20180403'.IF sy-subrc = 0.WRITE: / ls_sflight-carrid, ls_sflight-planetype.
ENDIF.

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

  1. ABAP性能优化之向内表添加纪录

    与其使用一般的 loop-endloop 方法来实现向内表添加多条记录,不如使用 append 命令的变体将一个内表的所有记录一次性添加入另一个内表.要注意的是两个内表的结构定义必须完全一样. 不推荐 ...

  2. SAP ABAP性能优化 - 调优工具 SM50 | ST05 | SAT

    更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical SAP系统提供了许多性能调优的工具,在本篇博客中,我将介绍下最常用的三种工具也即SM50, ST05 ...

  3. mysql reorg_生产数据库性能优化之reorg和表重建

    生产数据库的性能调优是一个系统的工程,它不仅要求DBA熟悉db2的工作原理和各种性能指标,还要求DBA也要熟悉操作系统.存储等其他知识,甚至要求DBA熟悉应用的设计原理以及它使用数据库的方式等.这里, ...

  4. 宅米网性能优化实践(内附小强点评)

    背景介绍 宅米是一家专注校园电子商务的互联网企业,目前主营校园超市O2O.公司成立于2014年11月,仅仅一年多的时间,公司即经过4轮融资,覆盖近200座城市,1000多所大中专院校,10000多栋宿 ...

  5. SAP ABAP程序优化-多线程并行处理

    转载请标明出处:http://blog.csdn.net/wanglei880526/article/details/8949754 实际项目实施过程中,我们会遇到程序性能优化的问题,这里介绍一种方法 ...

  6. ABAP性能优化之使用二分查找(Binary Search)选项

    READ命令使用顺序查找数据表,这会降低处理速度.取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度. 在使用binary search之前 必须首先将 ...

  7. ABAP性能优化之使用 “for all entries”

    在select语句后面的where附加项中可以使用左关联,这会极大的提高程序速度,但同时也有一些局限,如下: 重复项会被从结果数据集中自动删除,因此要注意在select语句中需要给出详细的唯一关键字组 ...

  8. ABAP性能优化之正确使用”move” 语句

    建议使用move语句取代 move-corresponding 语句, 因为 move-corresponding的执行速度很慢. 应该尽量一次性搬移内表的整条记录,而不是一个字段一个字段的取值. m ...

  9. abap性能优化——利用凭证的number ranger提高abap程序性能

    当我们的程序需要搜索某些凭证的时侯,常常会涉及到比较庞大的数据表,比如BSEG, MSEG, VBRP等等,如果这时又无法获取凭证号码等一些关键字段的值,那么程序必然会消耗非常多的资源.这种情况下,下 ...

最新文章

  1. vue 本地环境API代理设置和解决跨域
  2. 【文末有福利】卷积学习与图像识别的技术发展
  3. webmagic抓取实例
  4. 未发现数据源名称并且未指定默认驱动程序_看我如何发现NVIDIA GeForce Experience代码执行漏洞...
  5. ant design的自定义主题 modifyVars无效的原因
  6. JUnit 4和JUnit 5区别
  7. 洛谷P1080 国王游戏
  8. 软件需求和问题解决-转载
  9. spring-boot整合场景实例分析
  10. memcached 远程拒绝服务漏洞
  11. C++--第1课 - C到C++的升级
  12. CAM350 12.1(附补丁)
  13. 【预测模型】基于粒子群算法优化最小二乘支持向量机lssvm实现预测附matlab源码
  14. python换证件照底色
  15. 经过20天的面试终于进了阿里(分享面试过程)
  16. 2018-2019年江苏省高等学校“阿里云大数据技术实战训练营”大学生万人计划学术冬令营开营...
  17. Unicdoe【真正的完整码表】对照表(一)
  18. web编程开发_Web编程简介(Web设计和Web开发)
  19. 计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?
  20. 非计算机专业考计算机三级难吗,经验之谈:怎样通过计算机等级考试三级考试...

热门文章

  1. 一种高效自然光供电的6LoWPAN无线传感节点
  2. 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
  3. 如何按照DocNum+LineNum+流水号生成批次号
  4. 计算机系统 ahci模式,打开ahci模式后需要重装系统吗
  5. 如何使用git在gitee建立仓库并上传开源文件以及会遇到的问题
  6. python爬取淘宝商品做数据挖掘
  7. 32位和64位操作系统及软件的区别
  8. 计算机病毒金山毒霸,金山毒霸网络版成为计算机病毒的客星
  9. 网络连通性测试ping和tracert命令
  10. 2022保育员(初级)考试题库及模拟考试