【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 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)?相关推荐
- ABAP性能优化之向内表添加纪录
与其使用一般的 loop-endloop 方法来实现向内表添加多条记录,不如使用 append 命令的变体将一个内表的所有记录一次性添加入另一个内表.要注意的是两个内表的结构定义必须完全一样. 不推荐 ...
- SAP ABAP性能优化 - 调优工具 SM50 | ST05 | SAT
更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical SAP系统提供了许多性能调优的工具,在本篇博客中,我将介绍下最常用的三种工具也即SM50, ST05 ...
- mysql reorg_生产数据库性能优化之reorg和表重建
生产数据库的性能调优是一个系统的工程,它不仅要求DBA熟悉db2的工作原理和各种性能指标,还要求DBA也要熟悉操作系统.存储等其他知识,甚至要求DBA熟悉应用的设计原理以及它使用数据库的方式等.这里, ...
- 宅米网性能优化实践(内附小强点评)
背景介绍 宅米是一家专注校园电子商务的互联网企业,目前主营校园超市O2O.公司成立于2014年11月,仅仅一年多的时间,公司即经过4轮融资,覆盖近200座城市,1000多所大中专院校,10000多栋宿 ...
- SAP ABAP程序优化-多线程并行处理
转载请标明出处:http://blog.csdn.net/wanglei880526/article/details/8949754 实际项目实施过程中,我们会遇到程序性能优化的问题,这里介绍一种方法 ...
- ABAP性能优化之使用二分查找(Binary Search)选项
READ命令使用顺序查找数据表,这会降低处理速度.取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度. 在使用binary search之前 必须首先将 ...
- ABAP性能优化之使用 “for all entries”
在select语句后面的where附加项中可以使用左关联,这会极大的提高程序速度,但同时也有一些局限,如下: 重复项会被从结果数据集中自动删除,因此要注意在select语句中需要给出详细的唯一关键字组 ...
- ABAP性能优化之正确使用”move” 语句
建议使用move语句取代 move-corresponding 语句, 因为 move-corresponding的执行速度很慢. 应该尽量一次性搬移内表的整条记录,而不是一个字段一个字段的取值. m ...
- abap性能优化——利用凭证的number ranger提高abap程序性能
当我们的程序需要搜索某些凭证的时侯,常常会涉及到比较庞大的数据表,比如BSEG, MSEG, VBRP等等,如果这时又无法获取凭证号码等一些关键字段的值,那么程序必然会消耗非常多的资源.这种情况下,下 ...
最新文章
- vue 本地环境API代理设置和解决跨域
- 【文末有福利】卷积学习与图像识别的技术发展
- webmagic抓取实例
- 未发现数据源名称并且未指定默认驱动程序_看我如何发现NVIDIA GeForce Experience代码执行漏洞...
- ant design的自定义主题 modifyVars无效的原因
- JUnit 4和JUnit 5区别
- 洛谷P1080 国王游戏
- 软件需求和问题解决-转载
- spring-boot整合场景实例分析
- memcached 远程拒绝服务漏洞
- C++--第1课 - C到C++的升级
- CAM350 12.1(附补丁)
- 【预测模型】基于粒子群算法优化最小二乘支持向量机lssvm实现预测附matlab源码
- python换证件照底色
- 经过20天的面试终于进了阿里(分享面试过程)
- 2018-2019年江苏省高等学校“阿里云大数据技术实战训练营”大学生万人计划学术冬令营开营...
- Unicdoe【真正的完整码表】对照表(一)
- web编程开发_Web编程简介(Web设计和Web开发)
- 计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?
- 非计算机专业考计算机三级难吗,经验之谈:怎样通过计算机等级考试三级考试...